@ai-matrx/records 0.80.2 → 0.80.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +19 -0
- package/dist/app-table/index.cjs +100 -23
- package/dist/app-table/index.cjs.map +1 -1
- package/dist/app-table/index.d.cts +7 -7
- package/dist/app-table/index.d.ts +7 -7
- package/dist/app-table/index.js +100 -23
- package/dist/app-table/index.js.map +1 -1
- package/dist/{client-DKKRZKNw.d.ts → client-D1LTezMZ.d.ts} +10 -5
- package/dist/{client-BfNJEpar.d.cts → client-DLIKeBWF.d.cts} +10 -5
- package/dist/core/index.cjs +115 -31
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +22 -12
- package/dist/core/index.d.ts +22 -12
- package/dist/core/index.js +115 -31
- package/dist/core/index.js.map +1 -1
- package/dist/data/index.cjs +100 -23
- package/dist/data/index.cjs.map +1 -1
- package/dist/data/index.d.cts +7 -7
- package/dist/data/index.d.ts +7 -7
- package/dist/data/index.js +100 -23
- package/dist/data/index.js.map +1 -1
- package/dist/{declareTable-CzLMdOSy.d.cts → declareTable-02uao-5n.d.cts} +4 -4
- package/dist/{declareTable-Cg522Sk0.d.ts → declareTable-C5FlIS0z.d.ts} +4 -4
- package/dist/{field-DJAvDExi.d.ts → field-BIJiFPc0.d.ts} +1 -1
- package/dist/{field-DCXU6k9i.d.cts → field-snQG2jMq.d.cts} +1 -1
- package/dist/index.cjs +12 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/index.cjs +5 -0
- package/dist/memory/index.cjs.map +1 -1
- package/dist/memory/index.d.cts +6 -6
- package/dist/memory/index.d.ts +6 -6
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/{ports-Kpc-RihV.d.ts → ports-Y5gLbCXe.d.ts} +1 -1
- package/dist/{ports-DaHUjVg7.d.cts → ports-y1QNfM80.d.cts} +1 -1
- package/dist/react/index.cjs +107 -27
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +31 -1
- package/dist/react/index.d.ts +31 -1
- package/dist/react/index.js +107 -27
- package/dist/react/index.js.map +1 -1
- package/dist/realtime/index.d.cts +2 -2
- package/dist/realtime/index.d.ts +2 -2
- package/dist/{record-DCaOJbhA.d.cts → record-1yDCn169.d.cts} +26 -1
- package/dist/{record-DCaOJbhA.d.ts → record-1yDCn169.d.ts} +26 -1
- package/dist/{subscription-C_hNjbaR.d.cts → subscription-B_WaT-kr.d.cts} +1 -1
- package/dist/{subscription-B9znK2dw.d.ts → subscription-CUok1vAm.d.ts} +1 -1
- package/dist/{table-kind-B9RBUmSb.d.ts → table-kind-COmkYYkc.d.ts} +3 -3
- package/dist/{table-kind-DXktQGzR.d.cts → table-kind-LodkBhCZ.d.cts} +3 -3
- package/dist/templates/index.cjs +70 -6
- package/dist/templates/index.cjs.map +1 -1
- package/dist/templates/index.d.cts +26 -10
- package/dist/templates/index.d.ts +26 -10
- package/dist/templates/index.js +70 -6
- package/dist/templates/index.js.map +1 -1
- package/dist/{types-DuyBN2im.d.cts → types-BJGTxu3Y.d.cts} +2 -2
- package/dist/{types-b-VGi15H.d.ts → types-C5-AaPa6.d.ts} +2 -2
- package/dist/{types-CHEFgCu1.d.ts → types-CU_Tn2Np.d.ts} +2 -2
- package/dist/{types-CD2HoaZt.d.cts → types-yBZLtxrZ.d.cts} +2 -2
- package/dist/use-cases/index.cjs.map +1 -1
- package/dist/use-cases/index.d.cts +5 -5
- package/dist/use-cases/index.d.ts +5 -5
- package/dist/use-cases/index.js.map +1 -1
- package/dist/{validate-CubFFxpu.d.cts → validate-CE6qpJIb.d.cts} +1 -1
- package/dist/{validate-BEfYwBpA.d.ts → validate-Rz9djP6H.d.ts} +1 -1
- package/package.json +1 -1
package/dist/data/index.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { bK as EntityRefWithWords } from '../table-kind-
|
|
2
|
-
import { U as Uuid, h as RecordsResult, n as RecordPageSort, m as ReadRow } from '../record-
|
|
3
|
-
import { R as RecordsClient } from '../client-
|
|
4
|
-
import { b as Field } from '../field-
|
|
5
|
-
import { u as RuleExpression } from '../subscription-
|
|
6
|
-
import '../ports-
|
|
1
|
+
import { bK as EntityRefWithWords } from '../table-kind-LodkBhCZ.cjs';
|
|
2
|
+
import { U as Uuid, h as RecordsResult, n as RecordPageSort, m as ReadRow } from '../record-1yDCn169.cjs';
|
|
3
|
+
import { R as RecordsClient } from '../client-DLIKeBWF.cjs';
|
|
4
|
+
import { b as Field } from '../field-snQG2jMq.cjs';
|
|
5
|
+
import { u as RuleExpression } from '../subscription-B_WaT-kr.cjs';
|
|
6
|
+
import '../ports-y1QNfM80.cjs';
|
|
7
7
|
|
|
8
8
|
/** §0. A link to any thing: `{token, id, label}`. A custom row's token is `record`. Every link reads as `EntityRef[]`. */
|
|
9
9
|
type EntityRef = EntityRefWithWords;
|
|
@@ -113,7 +113,7 @@ interface TableAlias {
|
|
|
113
113
|
}
|
|
114
114
|
/**
|
|
115
115
|
* An alias bound to one PLATFORM entity type (contacts, projects, tasks…), served by `@ai-matrx/entity-data`'s port.
|
|
116
|
-
* `organizationId` is
|
|
116
|
+
* `organizationId` is an assumed organization FILTER for its lists, never a lock; writes carry the active organization.
|
|
117
117
|
*/
|
|
118
118
|
interface EntityAlias {
|
|
119
119
|
kind: "entity";
|
package/dist/data/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { bK as EntityRefWithWords } from '../table-kind-
|
|
2
|
-
import { U as Uuid, h as RecordsResult, n as RecordPageSort, m as ReadRow } from '../record-
|
|
3
|
-
import { R as RecordsClient } from '../client-
|
|
4
|
-
import { b as Field } from '../field-
|
|
5
|
-
import { u as RuleExpression } from '../subscription-
|
|
6
|
-
import '../ports-
|
|
1
|
+
import { bK as EntityRefWithWords } from '../table-kind-COmkYYkc.js';
|
|
2
|
+
import { U as Uuid, h as RecordsResult, n as RecordPageSort, m as ReadRow } from '../record-1yDCn169.js';
|
|
3
|
+
import { R as RecordsClient } from '../client-D1LTezMZ.js';
|
|
4
|
+
import { b as Field } from '../field-BIJiFPc0.js';
|
|
5
|
+
import { u as RuleExpression } from '../subscription-CUok1vAm.js';
|
|
6
|
+
import '../ports-Y5gLbCXe.js';
|
|
7
7
|
|
|
8
8
|
/** §0. A link to any thing: `{token, id, label}`. A custom row's token is `record`. Every link reads as `EntityRef[]`. */
|
|
9
9
|
type EntityRef = EntityRefWithWords;
|
|
@@ -113,7 +113,7 @@ interface TableAlias {
|
|
|
113
113
|
}
|
|
114
114
|
/**
|
|
115
115
|
* An alias bound to one PLATFORM entity type (contacts, projects, tasks…), served by `@ai-matrx/entity-data`'s port.
|
|
116
|
-
* `organizationId` is
|
|
116
|
+
* `organizationId` is an assumed organization FILTER for its lists, never a lock; writes carry the active organization.
|
|
117
117
|
*/
|
|
118
118
|
interface EntityAlias {
|
|
119
119
|
kind: "entity";
|
package/dist/data/index.js
CHANGED
|
@@ -194,6 +194,32 @@ function takePrimedTablePageBundle(organizationId, tableId, viewId) {
|
|
|
194
194
|
return Date.now() - held.at < PRIMED_TTL_MS ? held.answer : null;
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
+
// src/core/recordChanges.ts
|
|
198
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
199
|
+
function announceRecordChanged(recordId) {
|
|
200
|
+
for (const listener of [...listeners]) {
|
|
201
|
+
try {
|
|
202
|
+
listener(recordId);
|
|
203
|
+
} catch (thrown) {
|
|
204
|
+
console.error("[@ai-matrx/records] a record-change listener threw", thrown);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function onRecordChanged(listener) {
|
|
209
|
+
listeners.add(listener);
|
|
210
|
+
return () => listeners.delete(listener);
|
|
211
|
+
}
|
|
212
|
+
var tableListeners = /* @__PURE__ */ new Set();
|
|
213
|
+
function announceTableStructureChanged(tableId) {
|
|
214
|
+
for (const listener of [...tableListeners]) {
|
|
215
|
+
try {
|
|
216
|
+
listener(tableId);
|
|
217
|
+
} catch (thrown) {
|
|
218
|
+
console.error("[@ai-matrx/records] a table-structure listener threw", thrown);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
197
223
|
// src/archive.ts
|
|
198
224
|
var DEFAULT_ARCHIVE_LANE = "org";
|
|
199
225
|
|
|
@@ -1063,21 +1089,25 @@ var STORE_DOORS = [
|
|
|
1063
1089
|
{ name: "form_declare", args: "p_organization_id uuid, p_table_id uuid, p_title text, p_questions jsonb, p_presentation jsonb DEFAULT '{}'::jsonb, p_submission_cap integer DEFAULT NULL::integer, p_quarantine_rule_id uuid DEFAULT NULL::uuid, p_notify_rule_id uuid DEFAULT NULL::uuid, p_form_id uuid DEFAULT NULL::uuid, p_slug text DEFAULT NULL::text", returns: "uuid", security: "definer" },
|
|
1064
1090
|
{ name: "form_draft_read", args: "p_form_id uuid, p_secret text", returns: "TABLE(answers jsonb, saved_at timestamp with time zone, expires_at timestamp with time zone, state text, message text)", security: "definer" },
|
|
1065
1091
|
{ name: "form_draft_save", args: "p_form_id uuid, p_answers jsonb, p_secret text DEFAULT NULL::text, p_bucket text DEFAULT NULL::text, p_origin text DEFAULT NULL::text", returns: "TABLE(draft_secret text, saved_at timestamp with time zone, expires_at timestamp with time zone, state text, message text)", security: "definer" },
|
|
1092
|
+
{ name: "form_knobs", args: "p_organization_id uuid", returns: "jsonb", security: "definer" },
|
|
1066
1093
|
{ name: "form_look_options", args: "p_organization_id uuid, p_presentation jsonb DEFAULT '{}'::jsonb", returns: "jsonb", security: "definer" },
|
|
1067
1094
|
{ name: "form_notify", args: "p_organization_id uuid, p_form_id uuid, p_record_id uuid, p_submission_id uuid", returns: "uuid", security: "invoker" },
|
|
1068
1095
|
{ name: "form_preview_asks", args: "p_organization_id uuid, p_table_id uuid, p_questions jsonb, p_values jsonb", returns: "TABLE(field_key text, asked boolean, decided boolean, said text)", security: "definer" },
|
|
1069
1096
|
{ name: "form_preview_route", args: "p_organization_id uuid, p_table_id uuid, p_questions jsonb, p_endings jsonb, p_values jsonb", returns: "jsonb", security: "definer" },
|
|
1070
1097
|
{ name: "form_public", args: "p_form_id uuid", returns: "TABLE(form_id uuid, organization_id uuid, table_id uuid, title text, presentation jsonb, fields jsonb, honeypot_key text, state text, message text)", security: "definer" },
|
|
1071
1098
|
{ name: "form_public_asks", args: "p_form_id uuid, p_values jsonb, p_secret text DEFAULT NULL::text, p_origin text DEFAULT NULL::text", returns: "TABLE(field_key text, asked boolean, decided boolean, said text)", security: "definer" },
|
|
1099
|
+
{ name: "form_public_options", args: "p_form_id uuid", returns: "jsonb", security: "definer" },
|
|
1072
1100
|
{ name: "form_public_route", args: "p_form_id uuid, p_values jsonb", returns: "jsonb", security: "definer" },
|
|
1073
1101
|
{ name: "form_redirect_domains", args: "p_organization_id uuid", returns: "text[]", security: "invoker" },
|
|
1074
1102
|
{ name: "form_redirect_refusal", args: "p_organization_id uuid, p_url text", returns: "text", security: "invoker" },
|
|
1103
|
+
{ name: "form_respondent_copy", args: "p_organization_id uuid, p_form_id uuid, p_record_id uuid, p_submission_id uuid", returns: "jsonb", security: "definer" },
|
|
1075
1104
|
{ name: "form_restore", args: "p_organization_id uuid, p_form_id uuid", returns: "jsonb", security: "definer" },
|
|
1076
1105
|
{ name: "form_results", args: "p_organization_id uuid, p_form_id uuid", returns: "jsonb", security: "definer" },
|
|
1077
1106
|
{ name: "form_slug", args: "p_organization_id uuid, p_title text, p_form_id uuid DEFAULT NULL::uuid", returns: "text", security: "invoker" },
|
|
1078
1107
|
{ name: "form_submit", args: "p_form_id uuid, p_origin text, p_payload jsonb, p_bucket text, p_honeypot text DEFAULT NULL::text, p_client_key text DEFAULT NULL::text", returns: "TABLE(submission_id uuid, record_id uuid, state text, message text)", security: "definer" },
|
|
1079
1108
|
{ name: "form_theme_options", args: "", returns: "jsonb", security: "invoker" },
|
|
1080
1109
|
{ name: "form_visit", args: "p_form_id uuid, p_visit text, p_event text, p_field text DEFAULT NULL::text", returns: "text", security: "definer" },
|
|
1110
|
+
{ name: "form_visit_admit", args: "p_form_id uuid, p_bucket text", returns: "boolean", security: "definer" },
|
|
1081
1111
|
{ name: "forms", args: "p_organization_id uuid, p_table_id uuid DEFAULT NULL::uuid", returns: "TABLE(form_id uuid, table_id uuid, title text, slug text, published_at timestamp with time zone, closed_at timestamp with time zone, submission_cap integer, responses bigint, in_table bigint, held bigint, rejected bigint, state text, quarantine_rule_id uuid, notify_rule_id uuid, presentation jsonb)", security: "definer" },
|
|
1082
1112
|
{ name: "forms_archived", args: "p_organization_id uuid, p_table_id uuid DEFAULT NULL::uuid, p_limit integer DEFAULT 100", returns: "TABLE(form_id uuid, table_id uuid, table_name text, kind text, title text, slug text, archived_at timestamp with time zone, archived_by uuid, table_archived boolean, can_restore boolean)", security: "definer" },
|
|
1083
1113
|
{ name: "formula_compile_sql", args: "p_organization_id uuid, p_expr jsonb, p_values_sql text", returns: "text", security: "invoker" },
|
|
@@ -1345,6 +1375,7 @@ var STORE_DOORS = [
|
|
|
1345
1375
|
{ name: "record_filter_sql", args: "p_organization_id uuid, p_table_id uuid, p_filter jsonb", returns: "text", security: "invoker" },
|
|
1346
1376
|
{ name: "record_headers", args: "p_organization_id uuid, p_ids uuid[]", returns: "TABLE(id uuid, table_id uuid, created_at timestamp with time zone, updated_at timestamp with time zone, version integer, deleted_at timestamp with time zone, mine boolean, created_by uuid)", security: "definer" },
|
|
1347
1377
|
{ name: "record_history", args: "p_organization_id uuid, p_record_id uuid, p_limit integer DEFAULT 200, p_offset integer DEFAULT 0", returns: "TABLE(version integer, occurred_at timestamp with time zone, operation text, operation_label text, actor jsonb, changes jsonb, migration_id uuid, undoable boolean)", security: "definer" },
|
|
1378
|
+
{ name: "record_page_bundle", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
|
|
1348
1379
|
{ name: "record_platform_keys", args: "", returns: "text[]", security: "invoker" },
|
|
1349
1380
|
{ name: "record_relation_edges", args: "p_organization_id uuid, p_id uuid, p_table_id uuid, p_data_class text, p_data jsonb, p_deleted_at timestamp with time zone", returns: "TABLE(target_id uuid, edge_role text, field_id uuid, ord integer)", security: "invoker" },
|
|
1350
1381
|
{ name: "record_reparent", args: "p_organization_id uuid, p_record_id uuid, p_parent_id uuid", returns: "void", security: "definer" },
|
|
@@ -2010,6 +2041,7 @@ var DOORS = {
|
|
|
2010
2041
|
formPreviewRoute: "form_preview_route",
|
|
2011
2042
|
/** TYPEFORM-DUP: views, starts, completions, drop-off and answers per question. */
|
|
2012
2043
|
formResults: "form_results",
|
|
2044
|
+
formKnobs: "form_knobs",
|
|
2013
2045
|
formLookOptions: "form_look_options",
|
|
2014
2046
|
// PRODUCTS row 14 — "let clients book a 30-minute consult". A booking page IS an
|
|
2015
2047
|
// `anon_form`, so it is opened and closed by `anonPublish` like any other; this is
|
|
@@ -2441,28 +2473,6 @@ var DRILL_DOORS = {
|
|
|
2441
2473
|
rows: "drill_rows"
|
|
2442
2474
|
};
|
|
2443
2475
|
|
|
2444
|
-
// src/core/recordChanges.ts
|
|
2445
|
-
var listeners = /* @__PURE__ */ new Set();
|
|
2446
|
-
function announceRecordChanged(recordId) {
|
|
2447
|
-
for (const listener of [...listeners]) {
|
|
2448
|
-
try {
|
|
2449
|
-
listener(recordId);
|
|
2450
|
-
} catch (thrown) {
|
|
2451
|
-
console.error("[@ai-matrx/records] a record-change listener threw", thrown);
|
|
2452
|
-
}
|
|
2453
|
-
}
|
|
2454
|
-
}
|
|
2455
|
-
var tableListeners = /* @__PURE__ */ new Set();
|
|
2456
|
-
function announceTableStructureChanged(tableId) {
|
|
2457
|
-
for (const listener of [...tableListeners]) {
|
|
2458
|
-
try {
|
|
2459
|
-
listener(tableId);
|
|
2460
|
-
} catch (thrown) {
|
|
2461
|
-
console.error("[@ai-matrx/records] a table-structure listener threw", thrown);
|
|
2462
|
-
}
|
|
2463
|
-
}
|
|
2464
|
-
}
|
|
2465
|
-
|
|
2466
2476
|
// src/core/query.ts
|
|
2467
2477
|
var DEFAULT_PAGE_SIZE = 50;
|
|
2468
2478
|
function planQuery(query) {
|
|
@@ -2582,8 +2592,68 @@ function createRecordsClient(given) {
|
|
|
2582
2592
|
} catch {
|
|
2583
2593
|
}
|
|
2584
2594
|
}
|
|
2595
|
+
const RECORD_OPENERS = /* @__PURE__ */ new Set(["read_record", "record_row_controls", "record_history", "comment_thread", "computed_provenance"]);
|
|
2596
|
+
const recordFlights = /* @__PURE__ */ new Map();
|
|
2597
|
+
const recordAsked = /* @__PURE__ */ new Map();
|
|
2598
|
+
let recordChangesHeard = false;
|
|
2599
|
+
function bundleRecordOf(door, args) {
|
|
2600
|
+
if (RECORD_OPENERS.has(door)) return typeof args["p_record_id"] === "string" ? args["p_record_id"] : null;
|
|
2601
|
+
const ids = args["p_ids"];
|
|
2602
|
+
const one = Array.isArray(ids) && ids.length === 1 && typeof ids[0] === "string" ? ids[0] : null;
|
|
2603
|
+
if (door === "record_headers") return one;
|
|
2604
|
+
if (door === "my_levels" && args["p_type"] === "record") return one;
|
|
2605
|
+
return null;
|
|
2606
|
+
}
|
|
2607
|
+
async function fillRecordBundle(recordId) {
|
|
2608
|
+
if (!recordChangesHeard) {
|
|
2609
|
+
recordChangesHeard = true;
|
|
2610
|
+
onRecordChanged((changed) => {
|
|
2611
|
+
recordAsked.delete(changed);
|
|
2612
|
+
for (const key of [...bundleParts.keys()]) if (key.includes(changed)) bundleParts.delete(key);
|
|
2613
|
+
});
|
|
2614
|
+
}
|
|
2615
|
+
try {
|
|
2616
|
+
const usable = (r) => r !== null && !r.error && r.data !== null && typeof r.data === "object" && Array.isArray(r.data.parts);
|
|
2617
|
+
const primedAnswer = takePrimedTablePageBundle(org, `record:${recordId}`, null);
|
|
2618
|
+
let response = primedAnswer ? await primedAnswer : null;
|
|
2619
|
+
if (!usable(response)) {
|
|
2620
|
+
response = await config.dataSource.rpc("record_page_bundle", { p_organization_id: org, p_record_id: recordId }, { schema });
|
|
2621
|
+
}
|
|
2622
|
+
if (!usable(response)) return;
|
|
2623
|
+
const now = Date.now();
|
|
2624
|
+
for (const part of response.data.parts) {
|
|
2625
|
+
if (part.error !== void 0 || part.data === void 0) continue;
|
|
2626
|
+
bundleParts.set(bundleKey(part.door, part.args), { data: part.data, at: now });
|
|
2627
|
+
}
|
|
2628
|
+
} catch {
|
|
2629
|
+
}
|
|
2630
|
+
}
|
|
2631
|
+
async function fromRecordBundle(door, args) {
|
|
2632
|
+
if (!doorReady(config, "record_page_bundle")) return void 0;
|
|
2633
|
+
const recordId = bundleRecordOf(door, args);
|
|
2634
|
+
if (!recordId) return void 0;
|
|
2635
|
+
const opener = RECORD_OPENERS.has(door);
|
|
2636
|
+
if (!opener && !recordFlights.has(recordId) && !recordAsked.has(recordId)) return void 0;
|
|
2637
|
+
const asked = recordAsked.get(recordId);
|
|
2638
|
+
const fresh = asked !== void 0 && Date.now() - asked < BUNDLE_TTL_MS;
|
|
2639
|
+
if (!fresh && opener) {
|
|
2640
|
+
recordAsked.set(recordId, Date.now());
|
|
2641
|
+
const flight2 = fillRecordBundle(recordId).finally(() => recordFlights.delete(recordId));
|
|
2642
|
+
recordFlights.set(recordId, flight2);
|
|
2643
|
+
}
|
|
2644
|
+
const flight = recordFlights.get(recordId);
|
|
2645
|
+
if (flight) await flight;
|
|
2646
|
+
const key = bundleKey(door, args);
|
|
2647
|
+
const held = bundleParts.get(key);
|
|
2648
|
+
if (!held) return opener ? null : void 0;
|
|
2649
|
+
bundleParts.delete(key);
|
|
2650
|
+
return Date.now() - held.at < BUNDLE_TTL_MS ? { data: held.data } : null;
|
|
2651
|
+
}
|
|
2585
2652
|
async function fromBundle(door, args) {
|
|
2586
|
-
if (!config.dataSource.opensInOneCall
|
|
2653
|
+
if (!config.dataSource.opensInOneCall) return null;
|
|
2654
|
+
const fromRecord = await fromRecordBundle(door, args);
|
|
2655
|
+
if (fromRecord !== void 0) return fromRecord;
|
|
2656
|
+
if (!doorReady(config, "table_page_bundle")) return null;
|
|
2587
2657
|
const tableId = bundleTableOf(door, args);
|
|
2588
2658
|
if (tableId) {
|
|
2589
2659
|
const asked = bundleAsked.get(tableId);
|
|
@@ -4028,6 +4098,13 @@ function createRecordsClient(given) {
|
|
|
4028
4098
|
"formResults"
|
|
4029
4099
|
);
|
|
4030
4100
|
},
|
|
4101
|
+
async formKnobs() {
|
|
4102
|
+
return callDoor(
|
|
4103
|
+
DOORS.formKnobs,
|
|
4104
|
+
{ p_organization_id: org },
|
|
4105
|
+
"formKnobs"
|
|
4106
|
+
);
|
|
4107
|
+
},
|
|
4031
4108
|
async formLookOptions(args) {
|
|
4032
4109
|
return callDoor(
|
|
4033
4110
|
DOORS.formLookOptions,
|