@quillsql/react 2.13.35 → 2.13.37
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/dist/cjs/Chart.d.ts +0 -1
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +17 -14
- package/dist/cjs/ChartBuilder.d.ts +1 -0
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +178 -96
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +6 -8
- package/dist/cjs/Dashboard.d.ts +2 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +18 -8
- package/dist/cjs/ReportBuilder.d.ts +2 -0
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +398 -271
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +33 -11
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +17 -1
- package/dist/cjs/components/Chart/InternalChart.d.ts +0 -1
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +6 -7
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +75 -30
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +98 -106
- package/dist/cjs/components/QuillMultiSelectSectionList.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectSectionList.js +21 -16
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +18 -8
- package/dist/cjs/components/QuillSelectWithCombo.js +17 -7
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +1 -1
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +2 -2
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +16 -4
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +9 -18
- package/dist/cjs/components/UiComponents.d.ts +2 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +44 -28
- package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.js +28 -4
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +9 -1
- package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/cjs/hooks/useVirtualTables.js +11 -35
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +14 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +12 -11
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +63 -18
- package/dist/cjs/models/Client.d.ts +4 -5
- package/dist/cjs/models/Client.d.ts.map +1 -1
- package/dist/cjs/models/Pivot.d.ts +10 -0
- package/dist/cjs/models/Pivot.d.ts.map +1 -1
- package/dist/cjs/models/Report.d.ts +13 -1
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +799 -64
- package/dist/cjs/utils/astProcessing.d.ts +4 -1
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +2 -2
- package/dist/cjs/utils/client.d.ts.map +1 -1
- package/dist/cjs/utils/client.js +6 -3
- package/dist/cjs/utils/columnProcessing.d.ts +1 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +1 -0
- package/dist/cjs/utils/dashboard.d.ts +2 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +38 -10
- package/dist/cjs/utils/filterProcessing.d.ts +1 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/merge.d.ts +16 -0
- package/dist/cjs/utils/merge.d.ts.map +1 -1
- package/dist/cjs/utils/merge.js +210 -0
- package/dist/cjs/utils/paginationProcessing.d.ts +1 -1
- package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/paginationProcessing.js +3 -2
- package/dist/cjs/utils/pivotConstructor.d.ts +19 -9
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +90 -34
- package/dist/cjs/utils/queryConstructor.d.ts +8 -1
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +276 -310
- package/dist/cjs/utils/report.d.ts +25 -12
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +13 -7
- package/dist/cjs/utils/schema.d.ts +1 -1
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +3 -32
- package/dist/cjs/utils/tableProcessing.d.ts +43 -13
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +140 -75
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +10 -1
- package/dist/cjs/utils/valueFormatter.d.ts +2 -1
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +18 -14
- package/dist/esm/Chart.d.ts +0 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +0 -6
- package/dist/esm/ChartBuilder.d.ts +1 -0
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +179 -97
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +7 -9
- package/dist/esm/Dashboard.d.ts +2 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +1 -1
- package/dist/esm/ReportBuilder.d.ts +2 -0
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +399 -272
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +33 -11
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +17 -1
- package/dist/esm/components/Chart/InternalChart.d.ts +0 -1
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +6 -6
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +75 -30
- package/dist/esm/components/Dashboard/MetricComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +98 -106
- package/dist/esm/components/QuillMultiSelectSectionList.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectSectionList.js +5 -12
- package/dist/esm/components/QuillMultiSelectWithCombo.js +1 -1
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +1 -1
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -2
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +16 -4
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +9 -18
- package/dist/esm/components/UiComponents.d.ts +2 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +27 -21
- package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.js +28 -4
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +10 -2
- package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/esm/hooks/useVirtualTables.js +12 -36
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +14 -2
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +12 -11
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +63 -18
- package/dist/esm/models/Client.d.ts +4 -5
- package/dist/esm/models/Client.d.ts.map +1 -1
- package/dist/esm/models/Pivot.d.ts +10 -0
- package/dist/esm/models/Pivot.d.ts.map +1 -1
- package/dist/esm/models/Report.d.ts +13 -1
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +799 -64
- package/dist/esm/utils/astProcessing.d.ts +4 -1
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +2 -2
- package/dist/esm/utils/client.d.ts.map +1 -1
- package/dist/esm/utils/client.js +6 -3
- package/dist/esm/utils/columnProcessing.d.ts +1 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +1 -1
- package/dist/esm/utils/dashboard.d.ts +2 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +39 -11
- package/dist/esm/utils/filterProcessing.d.ts +1 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/merge.d.ts +16 -0
- package/dist/esm/utils/merge.d.ts.map +1 -1
- package/dist/esm/utils/merge.js +207 -0
- package/dist/esm/utils/paginationProcessing.d.ts +1 -1
- package/dist/esm/utils/paginationProcessing.d.ts.map +1 -1
- package/dist/esm/utils/paginationProcessing.js +3 -2
- package/dist/esm/utils/pivotConstructor.d.ts +19 -9
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +91 -35
- package/dist/esm/utils/queryConstructor.d.ts +8 -1
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +274 -314
- package/dist/esm/utils/report.d.ts +25 -12
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +13 -7
- package/dist/esm/utils/schema.d.ts +1 -1
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +1 -30
- package/dist/esm/utils/tableProcessing.d.ts +43 -13
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +140 -75
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +10 -1
- package/dist/esm/utils/valueFormatter.d.ts +2 -1
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +18 -14
- package/package.json +1 -1
|
@@ -54,7 +54,10 @@ export declare const createBasicSelectASTFromColumns: (columns: ColumnInternal[]
|
|
|
54
54
|
orderby: null;
|
|
55
55
|
limit: null;
|
|
56
56
|
};
|
|
57
|
-
export declare const fetchAndProcessASTFromPrompt: (aiPrompt: string, schema: Table[], client: QuillProviderClient, prevPivot?: Pivot, currentQuery?: string, prevTable?: string, dashboardName?: string
|
|
57
|
+
export declare const fetchAndProcessASTFromPrompt: (aiPrompt: string, schema: Table[], client: QuillProviderClient, prevPivot?: Pivot, currentQuery?: string, prevTable?: string, dashboardName?: string, tenants?: {
|
|
58
|
+
tenantField: string;
|
|
59
|
+
tenantIds: (string | number)[];
|
|
60
|
+
}[] | (string | number)[]) => Promise<{
|
|
58
61
|
ast: any;
|
|
59
62
|
pivot: Pivot | null | undefined;
|
|
60
63
|
whereAST: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIzC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,OAQxC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAe5D;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAgBtE;AAGD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAgB1E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,GAAG;;EA4BtD;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAahD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CActE;AAED,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,GAAG,EACT,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,GAAG,EAAE,GACb,GAAG,CAYL;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAC1C,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,KAAK,EAAE,GAClB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAmCvD;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,GAAG,GACjB;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAyG/B;AAED,eAAO,MAAM,UAAU,SAAU,GAAG,YAWnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,YACvB,GAAG,UACJ,KAAK,EAAE,KACd,CAAC,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAmCtC,CAAC;AAEF,eAAO,MAAM,+BAA+B,YACjC,cAAc,EAAE,aACd,MAAM;;;;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC;
|
|
1
|
+
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIzC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,OAQxC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAe5D;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAgBtE;AAGD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAgB1E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,GAAG;;EA4BtD;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAahD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CActE;AAED,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,GAAG,EACT,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,GAAG,EAAE,GACb,GAAG,CAYL;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAC1C,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,KAAK,EAAE,GAClB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAmCvD;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,GAAG,GACjB;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAyG/B;AAED,eAAO,MAAM,UAAU,SAAU,GAAG,YAWnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,YACvB,GAAG,UACJ,KAAK,EAAE,KACd,CAAC,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAmCtC,CAAC;AAEF,eAAO,MAAM,+BAA+B,YACjC,cAAc,EAAE,aACd,MAAM;;;;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC;AAGF,eAAO,MAAM,4BAA4B,aAC7B,MAAM,UACR,KAAK,EAAE,UACP,mBAAmB,cACf,KAAK,iBACF,MAAM,cACT,MAAM,kBACF,MAAM,YAElB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACtB,OAAO,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAmHA,CAAC;AAEF,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,UACnB,mBAAmB,UACnB,KAAK,EAAE,KACd,OAAO,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAqDA,CAAC;AAUF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,KAAK,EAAE,GACjB;IACD,0BAA0B,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAC;IAC7E,UAAU,EAAE,GAAG,CAAC;CACjB,CAoEA"}
|
|
@@ -327,7 +327,7 @@ export const createBasicSelectASTFromColumns = (columns, tableName) => {
|
|
|
327
327
|
};
|
|
328
328
|
};
|
|
329
329
|
//TODO: Move all fetches to a /sdk route
|
|
330
|
-
export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot, currentQuery, prevTable, dashboardName) => {
|
|
330
|
+
export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot, currentQuery, prevTable, dashboardName, tenants) => {
|
|
331
331
|
let res, data, ast, newAst, pivot;
|
|
332
332
|
let numRetries = 0;
|
|
333
333
|
let whereAST;
|
|
@@ -392,7 +392,7 @@ export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, pre
|
|
|
392
392
|
if (!tableInfo) {
|
|
393
393
|
throw new Error('Table info not found');
|
|
394
394
|
}
|
|
395
|
-
const uniqueValues = await getUniqueStringValues(tableInfo.columns, processedName, client, undefined, undefined, undefined, undefined, dashboardName);
|
|
395
|
+
const uniqueValues = await getUniqueStringValues(tableInfo.columns, processedName, client, tenants, undefined, undefined, undefined, undefined, dashboardName);
|
|
396
396
|
newAst = convertUnaryToBinary(newAst);
|
|
397
397
|
newAst = removeNonSelectedTableReferences(newAst, processedName, tableInfo.columns.map((col) => col.field), uniqueValues);
|
|
398
398
|
if (pivot) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEvD,eAAO,MAAM,YAAY,EAAE,MAK1B,CAAC;AAEF,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,eAAe,UAAQ,EACvB,YAAY,CAAC,EAAE,WAAW,GACzB,OAAO,CAAC,MAAM,GAAG;IAAE,cAAc,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAoDtD;AAED,wBAAsB,kBAAkB,CAAC,EACvC,aAAa,EACb,YAAY,EACZ,eAAe,EACf,MAAM,EACN,QAAQ,GACT,EAAE;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,WAAW,GAAG;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;;;GAyCA"}
|
package/dist/esm/utils/client.js
CHANGED
|
@@ -2,7 +2,6 @@ export const EMPTY_CLIENT = {
|
|
|
2
2
|
name: '',
|
|
3
3
|
_id: '',
|
|
4
4
|
databaseType: '',
|
|
5
|
-
adminCustomerId: '',
|
|
6
5
|
domainName: '',
|
|
7
6
|
};
|
|
8
7
|
export async function fetchClient(publicKey, queryEndpoint, withCredentials = false, queryHeaders) {
|
|
@@ -26,7 +25,10 @@ export async function fetchClient(publicKey, queryEndpoint, withCredentials = fa
|
|
|
26
25
|
});
|
|
27
26
|
const json = await response.json();
|
|
28
27
|
result = json.data?.data?.client || json.data?.client;
|
|
29
|
-
|
|
28
|
+
if (!result) {
|
|
29
|
+
throw new Error('No client found');
|
|
30
|
+
}
|
|
31
|
+
clientTenantIds = await Promise.all(result?.allTenantTypes?.map(async (tenant) => {
|
|
30
32
|
return await getClientTenantIds({
|
|
31
33
|
queryEndpoint,
|
|
32
34
|
queryHeaders,
|
|
@@ -38,10 +40,11 @@ export async function fetchClient(publicKey, queryEndpoint, withCredentials = fa
|
|
|
38
40
|
}
|
|
39
41
|
catch (error) {
|
|
40
42
|
console.error('ERROR:', error);
|
|
43
|
+
throw error;
|
|
41
44
|
}
|
|
42
45
|
return {
|
|
43
46
|
...result,
|
|
44
|
-
allTenantTypes: result
|
|
47
|
+
allTenantTypes: result?.allTenantTypes?.map((tenant) => ({
|
|
45
48
|
...tenant,
|
|
46
49
|
tenantIds: clientTenantIds?.find((clientTenant) => clientTenant.id === tenant.id)
|
|
47
50
|
?.tenantIds || [],
|
|
@@ -13,6 +13,7 @@ interface ConvertPostgresColumnParamsWithField {
|
|
|
13
13
|
type ConvertPostgresColumnParams = ConvertPostgresColumnParamsWithColumnInternal | ConvertPostgresColumnParamsWithField;
|
|
14
14
|
export declare function convertPostgresColumn(field: ConvertPostgresColumnParams): ColumnInternal;
|
|
15
15
|
export declare function convertColumnInfoToColumnInternal(columnInfo: ColumnInfo): ColumnInternal;
|
|
16
|
+
export declare function fieldTypeToDataTypeID(fieldType: string): number;
|
|
16
17
|
export declare function convertFieldTypeToJSType(fieldType: string): string;
|
|
17
18
|
export declare function convertFormatToJsType(column: Column): string;
|
|
18
19
|
export declare function processColumnName(columnName: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,UAAU,6CAA6C;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oCAAoC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,2BAA2B,GAC5B,6CAA6C,GAC7C,oCAAoC,CAAC;AAEzC,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,2BAA2B,GACjC,cAAc,CAmJhB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;
|
|
1
|
+
{"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,UAAU,6CAA6C;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oCAAoC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,2BAA2B,GAC5B,6CAA6C,GAC7C,oCAAoC,CAAC;AAEzC,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,2BAA2B,GACjC,cAAc,CAmJhB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0BD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA0C/D;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwDlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIvD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CASrD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAavD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,eAAO,MAAM,cAAc,WACjB,mBAAmB,oBACT,eAAe,EAAE,UAqDpC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { QuillReportInternal } from '../models/Report';
|
|
2
2
|
import { QuillProviderClient } from '../models/Client';
|
|
3
|
+
import { AdditionalProcessing } from './tableProcessing';
|
|
3
4
|
/**
|
|
4
5
|
* Returns a cleaned version of the dashboard item we store in state. We clean
|
|
5
6
|
* the dashboard item so that we aren't exposing unnecessary details to the
|
|
@@ -9,7 +10,7 @@ import { QuillProviderClient } from '../models/Client';
|
|
|
9
10
|
*/
|
|
10
11
|
export declare function cleanDashboardItem(item: {
|
|
11
12
|
[key: string]: any;
|
|
12
|
-
} | undefined, dashboardFilters: any, client: QuillProviderClient, dateBucket?: string): Promise<QuillReportInternal>;
|
|
13
|
+
} | undefined, dashboardFilters: any, client: QuillProviderClient, dateBucket?: string, additionalProcessing?: AdditionalProcessing): Promise<QuillReportInternal>;
|
|
13
14
|
export declare function getDashboard(dashboardName: string, client: QuillProviderClient, tenants?: {
|
|
14
15
|
tenantField: string;
|
|
15
16
|
tenantIds: (string | number)[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CAyE9B;AAuID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { generatePivotTable, generatePivotTableYAxis, } from '../internals/ReportBuilder/PivotModal';
|
|
2
|
-
import { snakeAndCamelCaseToTitleCase } from './textProcessing';
|
|
2
|
+
import { snakeAndCamelCaseToTitleCase, snakeCaseToTitleCase, } from './textProcessing';
|
|
3
3
|
import { getData } from './dataFetcher';
|
|
4
4
|
import { getDateBucketFromRange } from './dates';
|
|
5
5
|
import { generatePivotWithSQL } from './pivotConstructor';
|
|
6
|
+
import { convertFieldTypeToJSType, fieldTypeToDataTypeID, processColumnName, } from './columnProcessing';
|
|
6
7
|
const defaultDashboardItem = {
|
|
7
8
|
id: '',
|
|
8
9
|
name: '',
|
|
@@ -29,7 +30,7 @@ const defaultDashboardItem = {
|
|
|
29
30
|
* interface to build amazing dashboards on top of.
|
|
30
31
|
* @param item
|
|
31
32
|
*/
|
|
32
|
-
export async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
33
|
+
export async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, additionalProcessing) {
|
|
33
34
|
if (!item)
|
|
34
35
|
return defaultDashboardItem;
|
|
35
36
|
if (!item.rows) {
|
|
@@ -45,7 +46,7 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
45
46
|
let pivotTable;
|
|
46
47
|
let pivotError;
|
|
47
48
|
try {
|
|
48
|
-
pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket, item.dashboardName);
|
|
49
|
+
pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
|
|
49
50
|
}
|
|
50
51
|
catch (e) {
|
|
51
52
|
pivotTable = undefined;
|
|
@@ -70,7 +71,11 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
70
71
|
columnInternal: processedColumns,
|
|
71
72
|
chartType: item.chartType,
|
|
72
73
|
dateField: item.dateField,
|
|
73
|
-
pivot: pivotError
|
|
74
|
+
pivot: pivotError
|
|
75
|
+
? undefined
|
|
76
|
+
: item.pivot
|
|
77
|
+
? { ...item.pivot, columnValues: item.distinctStrings }
|
|
78
|
+
: undefined,
|
|
74
79
|
yAxisFields: pivotTable
|
|
75
80
|
? extractPivotedYAxis(pivotTable, item)
|
|
76
81
|
: item.yAxisFields,
|
|
@@ -82,10 +87,13 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
82
87
|
filterMap: item.filterMap,
|
|
83
88
|
flags: item.flags,
|
|
84
89
|
rowCount: item.rowCount ? parseInt(item.rowCount) : item.rows.length,
|
|
90
|
+
pivotRowCount: pivotTable ? pivotTable.rowCount : undefined,
|
|
85
91
|
template: item.template,
|
|
86
92
|
sort: item.sort,
|
|
87
93
|
itemQuery: item.itemQuery,
|
|
88
94
|
queryString: item.queryString,
|
|
95
|
+
pivotQuery: pivotTable?.pivotQuery,
|
|
96
|
+
comparisonPivotQuery: pivotTable?.comparisonPivotQuery,
|
|
89
97
|
referencedTables: item?.referencedTables || [],
|
|
90
98
|
referencedColumns: item?.referencedColumns || {},
|
|
91
99
|
error: item.error ?? pivotError,
|
|
@@ -94,7 +102,7 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
94
102
|
/**
|
|
95
103
|
* Extract and transform the data from itemInfo.
|
|
96
104
|
*/
|
|
97
|
-
async function getPivotTable(report, dashboardFilters, client, dateBucketInitial, dashboardName, tenants) {
|
|
105
|
+
async function getPivotTable(report, dashboardFilters, client, dateBucketInitial, additionalProcessing, dashboardName, tenants) {
|
|
98
106
|
if (!report)
|
|
99
107
|
return undefined;
|
|
100
108
|
const dateFilter = Object.values(dashboardFilters ?? {}).find((filter) => filter.filterType === 'date_range' || filter.operator === 'BETWEEN');
|
|
@@ -110,20 +118,27 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
110
118
|
if (pivot.rowField) {
|
|
111
119
|
columns.push({
|
|
112
120
|
field: pivot.rowField,
|
|
113
|
-
label:
|
|
114
|
-
format: pivot.rowFieldType,
|
|
121
|
+
label: snakeCaseToTitleCase(processColumnName(pivot.rowField)),
|
|
122
|
+
format: pivot.rowFieldType || 'string',
|
|
123
|
+
jsType: convertFieldTypeToJSType(pivot.rowFieldType || 'string'),
|
|
124
|
+
fieldType: pivot.rowFieldType || 'string',
|
|
125
|
+
dataTypeID: fieldTypeToDataTypeID(pivot.rowFieldType || 'string'),
|
|
115
126
|
});
|
|
116
127
|
}
|
|
117
128
|
if (pivot.valueField) {
|
|
118
129
|
columns.push({
|
|
119
130
|
field: pivot.valueField,
|
|
120
|
-
label: pivot.valueField
|
|
121
|
-
|
|
122
|
-
|
|
131
|
+
label: snakeCaseToTitleCase(processColumnName(pivot.valueField)),
|
|
132
|
+
format: pivot.valueFieldType || 'string',
|
|
133
|
+
jsType: convertFieldTypeToJSType(pivot.valueFieldType || 'string'),
|
|
134
|
+
fieldType: pivot.valueFieldType || 'string',
|
|
135
|
+
dataTypeID: fieldTypeToDataTypeID(pivot.valueFieldType || 'string'),
|
|
123
136
|
});
|
|
124
137
|
}
|
|
125
138
|
return {
|
|
126
139
|
rows: [],
|
|
140
|
+
rowCount: 0,
|
|
141
|
+
pivotQuery: '',
|
|
127
142
|
columns: columns,
|
|
128
143
|
};
|
|
129
144
|
}
|
|
@@ -142,7 +157,17 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
142
157
|
if (!dateBucket && filterDateRange) {
|
|
143
158
|
dateBucket = getDateBucketFromRange(filterDateRange);
|
|
144
159
|
}
|
|
145
|
-
const pivotTable = await generatePivotWithSQL(
|
|
160
|
+
const pivotTable = await generatePivotWithSQL({
|
|
161
|
+
pivot,
|
|
162
|
+
report,
|
|
163
|
+
client,
|
|
164
|
+
dateBucket,
|
|
165
|
+
dateFilter,
|
|
166
|
+
distinctStrings: report.distinctStrings,
|
|
167
|
+
dashboardName,
|
|
168
|
+
tenants,
|
|
169
|
+
additionalProcessing,
|
|
170
|
+
});
|
|
146
171
|
return pivotTable;
|
|
147
172
|
}
|
|
148
173
|
catch (e) {
|
|
@@ -155,8 +180,11 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
155
180
|
pivot,
|
|
156
181
|
report,
|
|
157
182
|
client,
|
|
183
|
+
uniqueValues: report.distinctStrings,
|
|
158
184
|
dashboardName,
|
|
159
185
|
tenants,
|
|
186
|
+
dateFilter,
|
|
187
|
+
additionalProcessing,
|
|
160
188
|
})
|
|
161
189
|
: undefined;
|
|
162
190
|
}
|
|
@@ -3,7 +3,7 @@ import { QuillReport } from '../models/Report';
|
|
|
3
3
|
import { FilterTreeNode } from './astFilterProcessing';
|
|
4
4
|
export declare function findAndProcessDateFilter(filters: any[]): any;
|
|
5
5
|
export declare function processFilterFromBackend(filter: any): any;
|
|
6
|
-
export declare function updateFilter(filter: any, value: any, comparison: any, dashboardName: string): any;
|
|
6
|
+
export declare function updateFilter(filter: any, value: any | undefined, comparison: any | undefined, dashboardName: string): any;
|
|
7
7
|
export declare const getType: (t: string) => FieldType;
|
|
8
8
|
/**
|
|
9
9
|
* Returns a sentence to describe a Filter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,YAAO,EACjB,UAAU,EAAE,GAAG,YAAO,EACtB,aAAa,EAAE,MAAM,OAmGtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,cA0DhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,cAAc,EAAE,CAoCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,yBAgCnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B/D;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,mBAAmB,GACvC,mBAAmB,CAkKrB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,cAAc,EAAE,GAC9B,GAAG,EAAE,CA+CP;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CA+BT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE;IACpD,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAChD,GAAG;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzB,CASA;AAED,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,WAClB,WAAW,EAAE,iBACP,MAAM,KACpB,CAAC,mBAAmB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,SAqDpD,CAAC"}
|
|
@@ -1,2 +1,18 @@
|
|
|
1
|
+
import { Pivot } from '../models/Pivot';
|
|
1
2
|
export declare function mergeComparisonRange(resp: any): any;
|
|
3
|
+
export declare function dateAdder(date: Date | string, interval: string): Date;
|
|
4
|
+
export declare function mergeComparisonPivotColumns({ pivot, rows, compRows, }: {
|
|
5
|
+
pivot: Pivot;
|
|
6
|
+
rows: any[];
|
|
7
|
+
compRows: any[];
|
|
8
|
+
}): any[];
|
|
9
|
+
export declare function mergeComparisonPivotRows({ pivot, rows, compRows, databaseType, dateBucket, comparisonInterval, columnFieldValues, }: {
|
|
10
|
+
pivot: Pivot;
|
|
11
|
+
rows: any[];
|
|
12
|
+
compRows: any[];
|
|
13
|
+
databaseType: string;
|
|
14
|
+
dateBucket?: string;
|
|
15
|
+
comparisonInterval?: string;
|
|
16
|
+
columnFieldValues?: string[];
|
|
17
|
+
}): any[];
|
|
2
18
|
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAgBnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrE;AAyBD,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,GAAG,GAAG,EAAE,CAMR;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,GAAG,EAAE,CAyBR"}
|
package/dist/esm/utils/merge.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { add, startOfDay, startOfMonth, startOfWeek, startOfYear, } from 'date-fns';
|
|
2
|
+
import { isStringType } from './columnProcessing';
|
|
3
|
+
import { utcToZonedTime } from 'date-fns-tz';
|
|
1
4
|
export function mergeComparisonRange(resp) {
|
|
2
5
|
if (resp.chartType === 'table')
|
|
3
6
|
return resp;
|
|
@@ -17,3 +20,207 @@ export function mergeComparisonRange(resp) {
|
|
|
17
20
|
});
|
|
18
21
|
return { ...resp, rows: newRows };
|
|
19
22
|
}
|
|
23
|
+
export function dateAdder(date, interval) {
|
|
24
|
+
const match = interval.match(/^(\d+)\s+(day|month|year)$/);
|
|
25
|
+
if (!match) {
|
|
26
|
+
throw new Error(`Invalid interval format: ${interval}`);
|
|
27
|
+
}
|
|
28
|
+
const [, valueStr, unit] = match;
|
|
29
|
+
if (!valueStr || !unit) {
|
|
30
|
+
throw new Error('Could not parse interval');
|
|
31
|
+
}
|
|
32
|
+
const value = parseInt(valueStr, 10);
|
|
33
|
+
const parsedDate = typeof date === 'string' ? new Date(date) : date;
|
|
34
|
+
switch (unit) {
|
|
35
|
+
case 'day':
|
|
36
|
+
return add(parsedDate, { days: value });
|
|
37
|
+
case 'month':
|
|
38
|
+
return add(parsedDate, { months: value });
|
|
39
|
+
case 'year':
|
|
40
|
+
return add(parsedDate, { years: value });
|
|
41
|
+
default:
|
|
42
|
+
throw new Error(`Unsupported interval unit: ${unit}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function dateTrunc(date, granularity = 'day', databaseType) {
|
|
46
|
+
const weekStartsOn = databaseType === 'mssql' ? 0 : 1;
|
|
47
|
+
const timeZone = 'UTC'; // standardize
|
|
48
|
+
const zonedDate = utcToZonedTime(date, timeZone);
|
|
49
|
+
switch (granularity.toLowerCase()) {
|
|
50
|
+
case 'week':
|
|
51
|
+
return startOfWeek(zonedDate, { weekStartsOn });
|
|
52
|
+
case 'month':
|
|
53
|
+
return startOfMonth(zonedDate);
|
|
54
|
+
case 'day':
|
|
55
|
+
return startOfDay(zonedDate);
|
|
56
|
+
case 'year':
|
|
57
|
+
return startOfYear(zonedDate);
|
|
58
|
+
default:
|
|
59
|
+
throw new Error(`Unsupported granularity: ${granularity}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function mergeComparisonPivotColumns({ pivot, rows, compRows, }) {
|
|
63
|
+
if (!compRows || !compRows.length)
|
|
64
|
+
return rows;
|
|
65
|
+
const mappedCompRows = compRows
|
|
66
|
+
.filter((compRow) => compRow.name !== pivot.rowField)
|
|
67
|
+
.map((compRow) => ({ ...compRow, name: `comparison_${compRow.name}` }));
|
|
68
|
+
return rows.concat(mappedCompRows);
|
|
69
|
+
}
|
|
70
|
+
export function mergeComparisonPivotRows({ pivot, rows, compRows, databaseType, dateBucket, comparisonInterval, columnFieldValues, }) {
|
|
71
|
+
if (!compRows || !compRows.length)
|
|
72
|
+
return rows;
|
|
73
|
+
if (pivot.columnField && columnFieldValues && columnFieldValues.length > 0) {
|
|
74
|
+
return merge2DPivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval);
|
|
75
|
+
}
|
|
76
|
+
if (pivot.rowField) {
|
|
77
|
+
return merge1DPivotRows(pivot, rows, compRows, databaseType, dateBucket, comparisonInterval);
|
|
78
|
+
}
|
|
79
|
+
return mergeAggregatedRows(pivot, rows, compRows);
|
|
80
|
+
}
|
|
81
|
+
function merge2DPivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval) {
|
|
82
|
+
if (!pivot || !pivot.columnField) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
if (isStringType(pivot.rowFieldType || '') || !pivot.rowFieldType) {
|
|
86
|
+
return merge2DStringPivotRows(pivot, rows, compRows, columnFieldValues);
|
|
87
|
+
}
|
|
88
|
+
return merge2DDatePivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval);
|
|
89
|
+
}
|
|
90
|
+
function merge2DStringPivotRows(pivot, rows, compRows, columnFieldValues) {
|
|
91
|
+
if (!pivot.rowField || !pivot.valueField) {
|
|
92
|
+
return rows;
|
|
93
|
+
}
|
|
94
|
+
return rows.map((row) => {
|
|
95
|
+
const matchingCompRow = compRows.find((compRow) => compRow[pivot.rowField] === row[pivot.rowField]);
|
|
96
|
+
const comparisonFields = columnFieldValues.reduce((acc, fieldValue) => {
|
|
97
|
+
acc[`comparison_${fieldValue}`] = matchingCompRow
|
|
98
|
+
? matchingCompRow[fieldValue] || null
|
|
99
|
+
: null;
|
|
100
|
+
return acc;
|
|
101
|
+
}, {});
|
|
102
|
+
return {
|
|
103
|
+
...row,
|
|
104
|
+
...comparisonFields,
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function merge2DDatePivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval) {
|
|
109
|
+
if (!comparisonInterval || !pivot.rowField) {
|
|
110
|
+
return rows;
|
|
111
|
+
}
|
|
112
|
+
return rows.map((row) => {
|
|
113
|
+
// Truncate the row date to match the SQL behavior
|
|
114
|
+
const rowDate = typeof row[pivot.rowField] === 'string'
|
|
115
|
+
? new Date(row[pivot.rowField])
|
|
116
|
+
: row[pivot.rowField];
|
|
117
|
+
const truncatedRowDate = dateTrunc(rowDate, dateBucket, databaseType);
|
|
118
|
+
// Find a matching compRow where adding the interval matches the truncatedRowDate
|
|
119
|
+
const matchingCompRow = compRows.find((compRow) => {
|
|
120
|
+
const comparisonDateWithInterval = dateAdder(compRow[pivot.rowField], comparisonInterval);
|
|
121
|
+
const truncatedCompRowDate = dateTrunc(comparisonDateWithInterval, dateBucket, databaseType);
|
|
122
|
+
return (truncatedRowDate.toISOString() === truncatedCompRowDate.toISOString());
|
|
123
|
+
});
|
|
124
|
+
// Create comparison fields for each column value
|
|
125
|
+
const comparisonFields = columnFieldValues.reduce((acc, fieldValue) => {
|
|
126
|
+
acc[`comparison_${fieldValue}`] = matchingCompRow
|
|
127
|
+
? matchingCompRow[fieldValue] || null
|
|
128
|
+
: null;
|
|
129
|
+
return acc;
|
|
130
|
+
}, {});
|
|
131
|
+
return {
|
|
132
|
+
...row,
|
|
133
|
+
...comparisonFields,
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function merge1DPivotRows(pivot, rows, compRows, databaseType, dateBucket, comparisonInterval) {
|
|
138
|
+
if (isStringType(pivot.rowFieldType || '') || !pivot.rowFieldType) {
|
|
139
|
+
return merge1DStringPivotRows(pivot, rows, compRows);
|
|
140
|
+
}
|
|
141
|
+
return merge1DDatePivotRows(pivot, rows, compRows, databaseType, dateBucket, comparisonInterval);
|
|
142
|
+
}
|
|
143
|
+
function merge1DStringPivotRows(pivot, rows, compRows) {
|
|
144
|
+
if (!pivot.rowField || !pivot.valueField) {
|
|
145
|
+
return rows;
|
|
146
|
+
}
|
|
147
|
+
return rows.map((row) => {
|
|
148
|
+
const matchingCompRow = compRows.find((compRow) => compRow[pivot.rowField] === row[pivot.rowField]);
|
|
149
|
+
let aggregationSuffix = '';
|
|
150
|
+
// match 'percentage' casing
|
|
151
|
+
if (matchingCompRow && pivot.aggregationType === 'percentage') {
|
|
152
|
+
if (matchingCompRow[`${pivot.valueField}_Percentage`]) {
|
|
153
|
+
aggregationSuffix = '_Percentage';
|
|
154
|
+
}
|
|
155
|
+
else if (matchingCompRow[`${pivot.valueField}_PERCENTAGE`]) {
|
|
156
|
+
aggregationSuffix = '_PERCENTAGE';
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
aggregationSuffix = '_percentage';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Return the merged row with the value from compRows, or null if no match is found
|
|
163
|
+
return {
|
|
164
|
+
...row,
|
|
165
|
+
[`comparison_${pivot.valueField}${aggregationSuffix}`]: matchingCompRow
|
|
166
|
+
? matchingCompRow[`${pivot.valueField}${aggregationSuffix}`]
|
|
167
|
+
: null,
|
|
168
|
+
};
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function merge1DDatePivotRows(pivot, rows, compRows, databaseType, dateBucket, comparisonInterval) {
|
|
172
|
+
if (!comparisonInterval || !pivot.rowField) {
|
|
173
|
+
return rows;
|
|
174
|
+
}
|
|
175
|
+
return rows.map((row) => {
|
|
176
|
+
// Truncate the row date to match the SQL behavior
|
|
177
|
+
const rowDate = typeof row[pivot.rowField] === 'string'
|
|
178
|
+
? new Date(row[pivot.rowField])
|
|
179
|
+
: row[pivot.rowField];
|
|
180
|
+
const truncatedRowDate = dateTrunc(rowDate, dateBucket, databaseType);
|
|
181
|
+
// Find a matching compRow where adding the interval matches the truncatedRowDate
|
|
182
|
+
const matchingCompRow = compRows.find((compRow) => {
|
|
183
|
+
const comparisonDateWithInterval = dateAdder(compRow[`${pivot.rowField}`], comparisonInterval);
|
|
184
|
+
const truncatedCompRowDate = dateTrunc(comparisonDateWithInterval, dateBucket, databaseType);
|
|
185
|
+
return (truncatedRowDate.toISOString() === truncatedCompRowDate.toISOString());
|
|
186
|
+
});
|
|
187
|
+
let aggregationSuffix = '';
|
|
188
|
+
// match 'percentage' casing
|
|
189
|
+
if (matchingCompRow && pivot.aggregationType === 'percentage') {
|
|
190
|
+
if (matchingCompRow[`${pivot.valueField}_Percentage`]) {
|
|
191
|
+
aggregationSuffix = '_Percentage';
|
|
192
|
+
}
|
|
193
|
+
else if (matchingCompRow[`${pivot.valueField}_PERCENTAGE`]) {
|
|
194
|
+
aggregationSuffix = '_PERCENTAGE';
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
aggregationSuffix = '_percentage';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
...row,
|
|
202
|
+
[`comparison_${pivot.valueField}${aggregationSuffix}`]: matchingCompRow?.[`${pivot.valueField}${aggregationSuffix}`] || null,
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
function mergeAggregatedRows(pivot, rows, compRows) {
|
|
207
|
+
return rows.map((row, i) => {
|
|
208
|
+
let aggregationSuffix = '';
|
|
209
|
+
// match 'percentage' casing
|
|
210
|
+
if (compRows[i] && pivot.aggregationType === 'percentage') {
|
|
211
|
+
if (compRows[i][`${pivot.valueField}_Percentage`]) {
|
|
212
|
+
aggregationSuffix = '_Percentage';
|
|
213
|
+
}
|
|
214
|
+
else if (compRows[i][`${pivot.valueField}_PERCENTAGE`]) {
|
|
215
|
+
aggregationSuffix = '_PERCENTAGE';
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
aggregationSuffix = '_percentage';
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const compRow = {
|
|
222
|
+
[`comparison_${pivot.valueField}${aggregationSuffix}`]: compRows[i]?.[`${pivot.valueField}${aggregationSuffix}`],
|
|
223
|
+
};
|
|
224
|
+
return { ...row, ...compRow };
|
|
225
|
+
});
|
|
226
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Pagination } from '../models/Pagination';
|
|
2
2
|
export declare const DEFAULT_PAGINATION: Pagination;
|
|
3
|
-
export declare function shouldFetchMore(pagination: Pagination, page: number, maxPage: number): boolean;
|
|
3
|
+
export declare function shouldFetchMore(pagination: Pagination, page: number, maxPage: number, currentRowCount?: number): boolean;
|
|
4
4
|
export declare function shouldSortInMemory(pagination: Pagination, rowCount?: number): boolean;
|
|
5
5
|
//# sourceMappingURL=paginationProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paginationProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/paginationProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,eAAO,MAAM,kBAAkB,EAAE,UAIhC,CAAC;AAEF,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"paginationProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/paginationProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,eAAO,MAAM,kBAAkB,EAAE,UAIhC,CAAC;AAEF,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,WAkBzB;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,WAK3E"}
|
|
@@ -3,8 +3,9 @@ export const DEFAULT_PAGINATION = {
|
|
|
3
3
|
rowsPerPage: 10,
|
|
4
4
|
rowsPerRequest: 600,
|
|
5
5
|
};
|
|
6
|
-
export function shouldFetchMore(pagination, page, maxPage) {
|
|
7
|
-
if (!pagination
|
|
6
|
+
export function shouldFetchMore(pagination, page, maxPage, currentRowCount) {
|
|
7
|
+
if (!pagination ||
|
|
8
|
+
(currentRowCount && currentRowCount >= pagination.rowsPerPage * (page + 1))) {
|
|
8
9
|
return false;
|
|
9
10
|
}
|
|
10
11
|
const indexAdjustedPage = page;
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { QuillProviderClient } from '../models/Client';
|
|
2
|
-
import {
|
|
3
|
-
import { Pivot } from '../models/Pivot';
|
|
2
|
+
import { Pivot, PivotData } from '../models/Pivot';
|
|
4
3
|
import { QuillReportInternal } from '../models/Report';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
import { AdditionalProcessing } from './tableProcessing';
|
|
5
|
+
export declare function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount, }: {
|
|
6
|
+
pivot: Pivot;
|
|
7
|
+
report?: QuillReportInternal;
|
|
8
|
+
client: QuillProviderClient;
|
|
9
|
+
dateBucket?: string;
|
|
10
|
+
dateFilter?: any;
|
|
11
|
+
distinctStrings?: string[];
|
|
12
|
+
dashboardName?: string;
|
|
13
|
+
tenants?: {
|
|
14
|
+
tenantField: string;
|
|
15
|
+
tenantIds: (string | number)[];
|
|
16
|
+
}[] | (string | number)[];
|
|
17
|
+
additionalProcessing?: AdditionalProcessing;
|
|
18
|
+
pivotQuery?: string;
|
|
19
|
+
comparisonPivotQuery?: string;
|
|
20
|
+
getPivotRowCount?: boolean;
|
|
21
|
+
}): Promise<PivotData>;
|
|
12
22
|
//# sourceMappingURL=pivotConstructor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,CAiVrB"}
|