@datawheel/data-explorer 1.0.10 → 1.0.12

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.
Files changed (2) hide show
  1. package/dist/main.mjs +154 -150
  2. package/package.json +1 -1
package/dist/main.mjs CHANGED
@@ -3311,16 +3311,14 @@ function TableView({
3311
3311
  setPagination,
3312
3312
  result
3313
3313
  }) {
3314
- var _a;
3315
3314
  const isData = Boolean(table.getRowModel().rows.length);
3316
3315
  const viewport = useRef(null);
3317
3316
  const rowRef = useRef(null);
3317
+ const url = (result == null ? void 0 : result.url) || "";
3318
3318
  useEffect(() => {
3319
- var _a2;
3320
- (_a2 = viewport.current) == null ? void 0 : _a2.scrollTo({ top: 0, behavior: "smooth" });
3319
+ var _a;
3320
+ (_a = viewport.current) == null ? void 0 : _a.scrollTo({ top: 0, behavior: "smooth" });
3321
3321
  }, [pagination == null ? void 0 : pagination.pageIndex, pagination == null ? void 0 : pagination.pageSize]);
3322
- const { data: serverSchema } = useServerSchema();
3323
- const url = (_a = serverSchema == null ? void 0 : serverSchema.url) != null ? _a : "";
3324
3322
  return /* @__PURE__ */ React13__default.createElement(Box, { sx: { height: "100%" } }, /* @__PURE__ */ React13__default.createElement(Flex, { direction: "column", justify: "space-between", sx: { height: "100%", flex: "1 1 auto" } }, /* @__PURE__ */ React13__default.createElement(MRT_ProgressBar, { isTopToolbar: false, table }), /* @__PURE__ */ React13__default.createElement(
3325
3323
  ScrollArea,
3326
3324
  {
@@ -3357,7 +3355,7 @@ function TableView({
3357
3355
  }
3358
3356
  },
3359
3357
  table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React13__default.createElement(Box, { component: "tr", key: headerGroup.id, sx: { fontWeight: "normal" } }, headerGroup.headers.map((header) => {
3360
- var _a2;
3358
+ var _a;
3361
3359
  const column = table.getColumn(header.id);
3362
3360
  const isNumeric = column.columnDef.dataType === "number";
3363
3361
  const isRowIndex = column.id === "#";
@@ -3399,7 +3397,7 @@ function TableView({
3399
3397
  }
3400
3398
  },
3401
3399
  header.isPlaceholder ? null : flexRender(
3402
- (_a2 = header.column.columnDef.Header) != null ? _a2 : header.column.columnDef.header,
3400
+ (_a = header.column.columnDef.Header) != null ? _a : header.column.columnDef.header,
3403
3401
  header.getContext()
3404
3402
  ),
3405
3403
  !isRowIndex && /* @__PURE__ */ React13__default.createElement(ColumnFilterCell, { isNumeric, header, table })
@@ -4209,6 +4207,150 @@ function Toolbar({
4209
4207
  return smallerThanLg ? /* @__PURE__ */ React13__default.createElement(Menu, null, /* @__PURE__ */ React13__default.createElement(Menu.Target, null, /* @__PURE__ */ React13__default.createElement(ActionIcon, null, /* @__PURE__ */ React13__default.createElement(IconSettings, null))), /* @__PURE__ */ React13__default.createElement(Menu.Dropdown, null, settings)) : settings;
4210
4208
  }
4211
4209
 
4210
+ // src/context/query.tsx
4211
+ init_esm_shims();
4212
+ var QueryContext = createContext(void 0);
4213
+ function QueryProvider({ children, defaultCube }) {
4214
+ const { tesseract } = useLogicLayer();
4215
+ const location2 = useLocation();
4216
+ const { updateCurrentQuery } = useActions();
4217
+ const { paginationConfig, measuresActive, serverURL, defaultLocale } = useSettings();
4218
+ const { data: schema, isLoading: schemaLoading, isError: schemaError } = useServerSchema();
4219
+ const updateUrl = useUpdateUrl();
4220
+ const queryItem = useSelector$1(selectCurrentQueryItem);
4221
+ const prevLocaleRef = useRef();
4222
+ function fetchMembers(level, localeStr, cubeName) {
4223
+ return tesseract.fetchMembers({ request: { cube: cubeName || "", level, locale: localeStr } });
4224
+ }
4225
+ const {
4226
+ run: runFetchMembers,
4227
+ data: membersData,
4228
+ isSuccess: isMembersSuccess,
4229
+ isLoading: membersLoading
4230
+ } = useAsync();
4231
+ const [transintionLocaleLoading, setTransintionLocaleLoading] = React13__default.useState(false);
4232
+ useEffect(() => {
4233
+ if (schemaLoading) {
4234
+ setTransintionLocaleLoading(true);
4235
+ }
4236
+ const searchParams = new URLSearchParams(location2.search);
4237
+ const cube = searchParams.get("cube");
4238
+ const cubeMap = (schema == null ? void 0 : schema.cubeMap) || void 0;
4239
+ if (cube && cubeMap && serverURL && cubeMap[cube] && (schema == null ? void 0 : schema.online)) {
4240
+ let newQuery = parsePermalink(cubeMap[cube], searchParams);
4241
+ newQuery = isValidQuery(newQuery == null ? void 0 : newQuery.params) ? newQuery : buildQuery({ params: { cube } });
4242
+ newQuery.params.locale = defaultLocale || newQuery.params.locale;
4243
+ if (newQuery) {
4244
+ const promises = Object.values(newQuery.params.drilldowns).map((dd) => {
4245
+ const currentDrilldown = queryItem.params.drilldowns[dd.key];
4246
+ const localeChanged = prevLocaleRef.current !== (newQuery == null ? void 0 : newQuery.params.locale);
4247
+ if (currentDrilldown && currentDrilldown.members && currentDrilldown.members.length > 0 && !localeChanged) {
4248
+ return Promise.resolve({
4249
+ drilldown: currentDrilldown,
4250
+ cut: buildCut({ ...currentDrilldown, active: false })
4251
+ });
4252
+ } else {
4253
+ return fetchMembers(dd.level, newQuery == null ? void 0 : newQuery.params.locale, cube).then((levelMeta) => {
4254
+ const cut = buildCut({ ...dd, active: false });
4255
+ return {
4256
+ drilldown: {
4257
+ ...dd,
4258
+ members: levelMeta.members
4259
+ },
4260
+ cut
4261
+ };
4262
+ });
4263
+ }
4264
+ });
4265
+ runFetchMembers(Promise.all(promises)).then((data) => {
4266
+ setTransintionLocaleLoading(false);
4267
+ prevLocaleRef.current = newQuery == null ? void 0 : newQuery.params.locale;
4268
+ const drilldowns = data.map((item) => item.drilldown);
4269
+ const cuts = data.map((item) => item.cut);
4270
+ newQuery.params.drilldowns = keyBy(drilldowns, "key");
4271
+ const existingCuts = keyBy(
4272
+ Object.values(newQuery.params.cuts || {}).map((c) => ({ ...c, key: c.level })),
4273
+ "key"
4274
+ );
4275
+ const newCuts = keyBy(cuts, "key");
4276
+ newQuery.params.cuts = { ...newCuts, ...existingCuts };
4277
+ const newQueryItem = isValidQuery(newQuery.params) ? newQuery : void 0;
4278
+ if (newQueryItem) {
4279
+ updateCurrentQuery({ ...newQuery, link: serializePermalink(newQuery) });
4280
+ }
4281
+ });
4282
+ }
4283
+ }
4284
+ if (!cube && cubeMap && serverURL && (schema == null ? void 0 : schema.online)) {
4285
+ const cubeDefault = defaultCube && hasProperty(cubeMap, defaultCube) ? defaultCube : Object.keys(cubeMap)[0];
4286
+ setDefaultValues(cubeMap[cubeDefault]);
4287
+ }
4288
+ }, [location2.search, runFetchMembers, schema, schemaLoading, serverURL, defaultLocale]);
4289
+ const onChangeCube = (table, subtopic) => {
4290
+ const locale = defaultLocale || queryItem.params.locale;
4291
+ const cubeMap = (schema == null ? void 0 : schema.cubeMap) || {};
4292
+ const cubeArray = getValues(cubeMap);
4293
+ const cube = cubeArray.find(
4294
+ (cube2) => cube2.name === table && getAnnotation(cube2, "subtopic", locale) === subtopic
4295
+ );
4296
+ if (cube) {
4297
+ setDefaultValues(cube);
4298
+ }
4299
+ };
4300
+ function setDefaultValues(cube) {
4301
+ const drilldowns = pickDefaultDrilldowns(cube.dimensions).map(
4302
+ (level) => buildDrilldown({
4303
+ ...level,
4304
+ key: level.name,
4305
+ active: true,
4306
+ properties: level.properties.map(
4307
+ (prop) => buildProperty({ level: level.name, name: prop.name })
4308
+ )
4309
+ })
4310
+ );
4311
+ const measuresLimit = typeof measuresActive !== "undefined" ? measuresActive : cube.measures.length;
4312
+ const measures = cube.measures.slice(0, measuresLimit).map((measure) => {
4313
+ return buildMeasure({
4314
+ active: true,
4315
+ key: measure.name,
4316
+ name: measure.name,
4317
+ caption: measure.caption
4318
+ });
4319
+ });
4320
+ const panel = queryItem.panel;
4321
+ const locale = defaultLocale || queryItem.params.locale;
4322
+ const query = buildQuery({
4323
+ params: {
4324
+ cube: cube.name,
4325
+ measures: keyBy(measures, (item) => item.key),
4326
+ drilldowns: keyBy(drilldowns, (item) => item.key),
4327
+ locale
4328
+ },
4329
+ panel: panel != null ? panel : "table"
4330
+ });
4331
+ updateUrl(query);
4332
+ }
4333
+ return /* @__PURE__ */ React13__default.createElement(
4334
+ QueryContext.Provider,
4335
+ {
4336
+ value: {
4337
+ onChangeCube,
4338
+ schemaLoading,
4339
+ membersLoading,
4340
+ transintionLocaleLoading
4341
+ }
4342
+ },
4343
+ children
4344
+ );
4345
+ }
4346
+ function useQueryItem() {
4347
+ const context = useContext(QueryContext);
4348
+ if (context === void 0) {
4349
+ throw new Error("useQuery must be used within a QueryProvider");
4350
+ }
4351
+ return context;
4352
+ }
4353
+
4212
4354
  // src/components/ExplorerResults.tsx
4213
4355
  var useStyles2 = createStyles(() => ({
4214
4356
  container: {
@@ -4224,6 +4366,7 @@ function ExplorerResults(props) {
4224
4366
  isError: schemaError,
4225
4367
  error: schemaErrorDetail
4226
4368
  } = useServerSchema();
4369
+ const { transintionLocaleLoading } = useQueryItem();
4227
4370
  const { params } = useSelector$1(selectCurrentQueryItem);
4228
4371
  const cubeMap = (schema == null ? void 0 : schema.cubeMap) || {};
4229
4372
  const cube = cubeMap[params.cube];
@@ -4251,7 +4394,7 @@ function ExplorerResults(props) {
4251
4394
  }
4252
4395
  );
4253
4396
  }
4254
- if (isServerOnline == null || !cube) {
4397
+ if (isServerOnline == null || !cube || schemaLoading || transintionLocaleLoading) {
4255
4398
  return /* @__PURE__ */ React13__default.createElement(
4256
4399
  Paper,
4257
4400
  {
@@ -4360,7 +4503,7 @@ function SuccessResult(props) {
4360
4503
  h: "fit-content"
4361
4504
  },
4362
4505
  /* @__PURE__ */ React13__default.createElement(ExplorerTabs, { panels, onChange: tabHandler, value: panelKey }),
4363
- (!queryItem.panel || queryItem.panel === "table") && /* @__PURE__ */ React13__default.createElement(Group, { sx: { display: "flex", flex: "0 1 auto", gap: "0.5rem" }, mr: "sm", noWrap: true }, props.table && /* @__PURE__ */ React13__default.createElement(Toolbar, { table: props.table, fullscreen }), /* @__PURE__ */ React13__default.createElement(DrawerMenu_default, null))
4506
+ (!queryItem.panel || queryItem.panel === "table") && /* @__PURE__ */ React13__default.createElement(Group, { sx: { display: "flex", flex: "0 1 auto", gap: "0.5rem" }, mr: "sm", noWrap: true }, table && /* @__PURE__ */ React13__default.createElement(Toolbar, { table, fullscreen }), /* @__PURE__ */ React13__default.createElement(DrawerMenu_default, null))
4364
4507
  ),
4365
4508
  isPreviewMode && /* @__PURE__ */ React13__default.createElement(Alert, { id: "alert-load-all-results", color: "yellow", radius: 0, sx: { flex: "0 0 auto" } }, /* @__PURE__ */ React13__default.createElement(Group, { position: "apart" }, /* @__PURE__ */ React13__default.createElement(Text, null, /* @__PURE__ */ React13__default.createElement(Text, { fw: 700, span: true }, t("previewMode.title_preview"), ":", " "), /* @__PURE__ */ React13__default.createElement(Text, { span: true }, t("previewMode.description_preview", { limit: previewLimit }))), /* @__PURE__ */ React13__default.createElement(PreviewModeSwitch, null))),
4366
4509
  /* @__PURE__ */ React13__default.createElement(
@@ -4396,7 +4539,7 @@ init_esm_shims();
4396
4539
 
4397
4540
  // src/utils/create-context.ts
4398
4541
  init_esm_shims();
4399
- var createContext3 = (name4) => {
4542
+ var createContext4 = (name4) => {
4400
4543
  const Context = React13__default.createContext(void 0);
4401
4544
  const useContext5 = () => {
4402
4545
  const ctx = React13__default.useContext(Context);
@@ -4609,7 +4752,7 @@ function useCubeSearch(input, graph) {
4609
4752
  }
4610
4753
 
4611
4754
  // src/components/SideBar.tsx
4612
- var [useSideBar, Provider] = createContext3("SideBar");
4755
+ var [useSideBar, Provider] = createContext4("SideBar");
4613
4756
  function SideBarProvider(props) {
4614
4757
  const [input, setInput] = useDebouncedState("", 200);
4615
4758
  const [expanded, setExpanded] = useState(true);
@@ -4808,143 +4951,6 @@ init_esm_shims();
4808
4951
 
4809
4952
  // src/components/Results.tsx
4810
4953
  init_esm_shims();
4811
-
4812
- // src/context/query.tsx
4813
- init_esm_shims();
4814
- var QueryContext = createContext(void 0);
4815
- function QueryProvider({ children, defaultCube }) {
4816
- const { tesseract } = useLogicLayer();
4817
- const location2 = useLocation();
4818
- const { updateCurrentQuery } = useActions();
4819
- const { paginationConfig, measuresActive, serverURL, defaultLocale } = useSettings();
4820
- const { data: schema, isLoading: schemaLoading, isError: schemaError } = useServerSchema();
4821
- const updateUrl = useUpdateUrl();
4822
- const queryItem = useSelector$1(selectCurrentQueryItem);
4823
- function fetchMembers(level, localeStr, cubeName) {
4824
- return tesseract.fetchMembers({ request: { cube: cubeName || "", level, locale: localeStr } });
4825
- }
4826
- const {
4827
- run: runFetchMembers,
4828
- data: membersData,
4829
- isSuccess: isMembersSuccess,
4830
- isLoading: membersLoading
4831
- } = useAsync();
4832
- useEffect(() => {
4833
- const searchParams = new URLSearchParams(location2.search);
4834
- const cube = searchParams.get("cube");
4835
- const cubeMap = (schema == null ? void 0 : schema.cubeMap) || void 0;
4836
- if (cube && cubeMap && serverURL && cubeMap[cube] && (schema == null ? void 0 : schema.online)) {
4837
- let newQuery = parsePermalink(cubeMap[cube], searchParams);
4838
- newQuery = isValidQuery(newQuery == null ? void 0 : newQuery.params) ? newQuery : buildQuery({ params: { cube } });
4839
- newQuery.params.locale = defaultLocale || newQuery.params.locale;
4840
- if (newQuery) {
4841
- const promises = Object.values(newQuery.params.drilldowns).map((dd) => {
4842
- const currentDrilldown = queryItem.params.drilldowns[dd.key];
4843
- if (currentDrilldown && currentDrilldown.members && currentDrilldown.members.length > 0) {
4844
- return Promise.resolve({
4845
- drilldown: currentDrilldown,
4846
- cut: buildCut({ ...currentDrilldown, active: false })
4847
- });
4848
- } else {
4849
- return fetchMembers(dd.level, newQuery == null ? void 0 : newQuery.params.locale, cube).then((levelMeta) => {
4850
- const cut = buildCut({ ...dd, active: false });
4851
- return {
4852
- drilldown: {
4853
- ...dd,
4854
- members: levelMeta.members
4855
- },
4856
- cut
4857
- };
4858
- });
4859
- }
4860
- });
4861
- runFetchMembers(Promise.all(promises)).then((data) => {
4862
- const drilldowns = data.map((item) => item.drilldown);
4863
- const cuts = data.map((item) => item.cut);
4864
- newQuery.params.drilldowns = keyBy(drilldowns, "key");
4865
- const existingCuts = keyBy(
4866
- Object.values(newQuery.params.cuts || {}).map((c) => ({ ...c, key: c.level })),
4867
- "key"
4868
- );
4869
- const newCuts = keyBy(cuts, "key");
4870
- newQuery.params.cuts = { ...newCuts, ...existingCuts };
4871
- const newQueryItem = isValidQuery(newQuery.params) ? newQuery : void 0;
4872
- if (newQueryItem) {
4873
- updateCurrentQuery({ ...newQuery, link: serializePermalink(newQuery) });
4874
- }
4875
- });
4876
- }
4877
- }
4878
- if (!cube && cubeMap && serverURL && (schema == null ? void 0 : schema.online)) {
4879
- const cubeDefault = defaultCube && hasProperty(cubeMap, defaultCube) ? defaultCube : Object.keys(cubeMap)[0];
4880
- setDefaultValues(cubeMap[cubeDefault]);
4881
- }
4882
- }, [location2.search, runFetchMembers, schema, serverURL, defaultLocale]);
4883
- const onChangeCube = (table, subtopic) => {
4884
- const locale = defaultLocale || queryItem.params.locale;
4885
- const cubeMap = (schema == null ? void 0 : schema.cubeMap) || {};
4886
- const cubeArray = getValues(cubeMap);
4887
- const cube = cubeArray.find(
4888
- (cube2) => cube2.name === table && getAnnotation(cube2, "subtopic", locale) === subtopic
4889
- );
4890
- if (cube) {
4891
- setDefaultValues(cube);
4892
- }
4893
- };
4894
- function setDefaultValues(cube) {
4895
- const drilldowns = pickDefaultDrilldowns(cube.dimensions).map(
4896
- (level) => buildDrilldown({
4897
- ...level,
4898
- key: level.name,
4899
- active: true,
4900
- properties: level.properties.map(
4901
- (prop) => buildProperty({ level: level.name, name: prop.name })
4902
- )
4903
- })
4904
- );
4905
- const measuresLimit = typeof measuresActive !== "undefined" ? measuresActive : cube.measures.length;
4906
- const measures = cube.measures.slice(0, measuresLimit).map((measure) => {
4907
- return buildMeasure({
4908
- active: true,
4909
- key: measure.name,
4910
- name: measure.name,
4911
- caption: measure.caption
4912
- });
4913
- });
4914
- const panel = queryItem.panel;
4915
- const locale = defaultLocale || queryItem.params.locale;
4916
- const query = buildQuery({
4917
- params: {
4918
- cube: cube.name,
4919
- measures: keyBy(measures, (item) => item.key),
4920
- drilldowns: keyBy(drilldowns, (item) => item.key),
4921
- locale
4922
- },
4923
- panel: panel != null ? panel : "table"
4924
- });
4925
- updateUrl(query);
4926
- }
4927
- return /* @__PURE__ */ React13__default.createElement(
4928
- QueryContext.Provider,
4929
- {
4930
- value: {
4931
- onChangeCube,
4932
- schemaLoading,
4933
- membersLoading
4934
- }
4935
- },
4936
- children
4937
- );
4938
- }
4939
- function useQueryItem() {
4940
- const context = useContext(QueryContext);
4941
- if (context === void 0) {
4942
- throw new Error("useQuery must be used within a QueryProvider");
4943
- }
4944
- return context;
4945
- }
4946
-
4947
- // src/components/Results.tsx
4948
4954
  function Results(props) {
4949
4955
  const { graph, selectedItem, locale, getCube: getCube2, isSelected: isSelected2, isSelectionInProgress } = props;
4950
4956
  const { classes } = useStyles3();
@@ -5628,7 +5634,6 @@ var useStyles5 = createStyles((theme) => ({
5628
5634
  function PivotView(props) {
5629
5635
  var _a;
5630
5636
  const { cube, params, result, isLoading, ...mantineReactTableProps } = props;
5631
- console.log("PivotView", props);
5632
5637
  const locale = params.locale;
5633
5638
  const { translate: t } = useTranslation();
5634
5639
  const { data: schema } = useServerSchema();
@@ -7743,7 +7748,6 @@ function VizbuilderView(props) {
7743
7748
  init_esm_shims();
7744
7749
  function RawResponseView(props) {
7745
7750
  const { result, isLoading, isFetching } = props;
7746
- console.log(result);
7747
7751
  const theme = useMantineTheme();
7748
7752
  const token = "tokenValue";
7749
7753
  const tokenizedUrl = (result == null ? void 0 : result.url) ? `${result.url}${`&token=${token}` }` : "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datawheel/data-explorer",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "main": "./dist/main.mjs",
5
5
  "types": "./dist/main.d.mts",
6
6
  "files": [