!7 concept Statement { S globalID = aGlobalIDUnlessLoading(); S text; S comments; long discordUserID; S context; } cmodule Statements > DynCRUD { enhanceFrame { internalFrameIcon(f, gazelle_frameIcon()); } start { dbIndexing(Statement, 'globalID); crud.multiLineFields = litset('text, 'comments); crud.dontDuplicateFields = litset('globalID); crud.renderer = func(Statement r) -> Map { litorderedmap("Statement ID" := r.globalID, text := joinWithSpace(tlft(r.text)), comments := escapeNewLines(r.comments)) }; onConceptsChange(r { vmBus_sendMessage('gazelleStatementsChanged, this) }); } // API Pair addStatement(S text) { ret addStatementWithComment(text, null); } Pair addStatementWithComment(S text, S comment) { Pair p = uniq2_sync(Statement, text := rtrim(text), comments := nullIfEmpty(rtrim(comment))); if (p.b) vmBus_sendMessage('gazelleStatementCreated, this, p.a); ret pair(p.a.globalID, p.b); } PairS textAndCommentForStatement(S statementID) { Statement r = conceptWhere Statement(globalID := statementID); ret r == null ? null : pair(r.text, r.comments); } }