@plasmicpkgs/plasmic-rich-components 1.0.103 → 1.0.105

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/index.js CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  var registerComponent = require('@plasmicapp/host/registerComponent');
4
4
  require('@plasmicapp/host/registerGlobalContext');
5
- require('lodash/get');
6
5
  var React = require('react');
7
- var dataSources = require('@plasmicapp/data-sources');
8
6
  var antd = require('antd');
7
+ require('lodash/get');
8
+ var dataSources = require('@plasmicapp/data-sources');
9
9
  var tinycolor = require('@ctrl/tinycolor');
10
10
  var icons = require('@ant-design/icons');
11
11
  var proComponents = require('@ant-design/pro-components');
@@ -63,6 +63,36 @@ const mkShortId = () => `${Math.random()}`;
63
63
  function withoutFalsey(xs) {
64
64
  return xs.filter((x) => !!x);
65
65
  }
66
+ class ErrorBoundary extends React__default.default.Component {
67
+ constructor() {
68
+ super(...arguments);
69
+ this.state = { hasError: false, errorInfo: "" };
70
+ }
71
+ static getDerivedStateFromError(error) {
72
+ return { hasError: true, errorInfo: error.message };
73
+ }
74
+ componentDidCatch(error, errorInfo) {
75
+ console.log(error, errorInfo);
76
+ }
77
+ componentDidUpdate(prevProps, prevState) {
78
+ if (prevProps.canvasEnvId !== this.props.canvasEnvId && prevState.hasError) {
79
+ this.setState({ hasError: false });
80
+ }
81
+ }
82
+ render() {
83
+ if (this.state.hasError) {
84
+ return /* @__PURE__ */ React__default.default.createElement(
85
+ antd.Result,
86
+ {
87
+ status: "error",
88
+ title: "Something went wrong.",
89
+ extra: this.state.errorInfo
90
+ }
91
+ );
92
+ }
93
+ return this.props.children;
94
+ }
95
+ }
66
96
 
67
97
  var __defProp$9 = Object.defineProperty;
68
98
  var __defProps$7 = Object.defineProperties;
@@ -1459,9 +1489,10 @@ function RichTable(props) {
1459
1489
  if (!isClient) {
1460
1490
  return null;
1461
1491
  }
1462
- return /* @__PURE__ */ React__default.default.createElement("div", { className: `${className} ${scopeClassName != null ? scopeClassName : ""}` }, /* @__PURE__ */ React__default.default.createElement(
1492
+ return /* @__PURE__ */ React__default.default.createElement("div", { className: `${className} ${scopeClassName != null ? scopeClassName : ""}` }, /* @__PURE__ */ React__default.default.createElement(ErrorBoundary, { canvasEnvId: props["data-plasmic-canvas-envs"] }, /* @__PURE__ */ React__default.default.createElement(
1463
1493
  proComponents.ProTable,
1464
1494
  __spreadProps$2(__spreadValues$3({
1495
+ ErrorBoundary: false,
1465
1496
  rowClassName: props.onRowClick || props.canSelectRows === "click" ? "plasmic-table-row-clickable" : void 0,
1466
1497
  actionRef,
1467
1498
  columns: columnDefinitions,
@@ -1518,7 +1549,7 @@ function RichTable(props) {
1518
1549
  !hideExports && /* @__PURE__ */ React__default.default.createElement(ExportMenu, { data })
1519
1550
  ].filter((x) => !!x)
1520
1551
  })
1521
- ), /* @__PURE__ */ React__default.default.createElement(
1552
+ )), /* @__PURE__ */ React__default.default.createElement(
1522
1553
  "style",
1523
1554
  {
1524
1555
  dangerouslySetInnerHTML: {
@@ -2093,6 +2124,10 @@ const listCss = `
2093
2124
  padding-right: 8px;
2094
2125
  }
2095
2126
 
2127
+ .ant-list .plasmic-list-item {
2128
+ align-items: stretch;
2129
+ }
2130
+
2096
2131
  .plasmic-list-item--clickable:hover {
2097
2132
  background-color: #8881;
2098
2133
  }
@@ -2142,7 +2177,7 @@ function RichList(props) {
2142
2177
  pageSize = 10,
2143
2178
  hideSearch,
2144
2179
  rowKey,
2145
- pagination,
2180
+ pagination = true,
2146
2181
  onRowClick
2147
2182
  } = _a; __objRest(_a, [
2148
2183
  "data",
@@ -2252,7 +2287,7 @@ function RichList(props) {
2252
2287
  var _a3;
2253
2288
  return (_a3 = linkWrapper == null ? void 0 : linkWrapper(x)) != null ? _a3 : x;
2254
2289
  }
2255
- return type === "grid" ? /* @__PURE__ */ React__default.default.createElement(antd.List.Item, null, maybeLink(
2290
+ return type === "grid" ? /* @__PURE__ */ React__default.default.createElement(antd.List.Item, { className: "plasmic-list-item" }, maybeLink(
2256
2291
  /* @__PURE__ */ React__default.default.createElement(
2257
2292
  antd.Card,
2258
2293
  {
@@ -2270,6 +2305,7 @@ function RichList(props) {
2270
2305
  {
2271
2306
  actions,
2272
2307
  className: classNames__default.default({
2308
+ "plasmic-list-item": true,
2273
2309
  "plasmic-list-item--clickable": hasLink
2274
2310
  })
2275
2311
  },
@@ -2363,7 +2399,7 @@ function useRoleDefinitions(data, props) {
2363
2399
  const schema = data == null ? void 0 : data.schema;
2364
2400
  const schemaMap = new Map((_a = data == null ? void 0 : data.schema) == null ? void 0 : _a.fields.map((f) => [f.id, f]));
2365
2401
  if (!data || !schema) {
2366
- return { normalized: [], roleConfigs: {}, finalRoles: {} };
2402
+ return { normalized: [], finalRoles: {} };
2367
2403
  }
2368
2404
  function tagFieldConfigs(role) {
2369
2405
  var _a2;
@@ -2377,27 +2413,33 @@ function useRoleDefinitions(data, props) {
2377
2413
  return [];
2378
2414
  }
2379
2415
  }
2380
- const { mergedFields, minimalFullLengthFields } = dataSources.deriveFieldConfigs(
2381
- [
2382
- ...tagFieldConfigs("image"),
2383
- ...tagFieldConfigs("content"),
2384
- ...tagFieldConfigs("title"),
2385
- ...tagFieldConfigs("beforeTitle"),
2386
- ...tagFieldConfigs("afterTitle"),
2387
- ...tagFieldConfigs("subtitle")
2388
- ],
2389
- schema,
2390
- (field) => __spreadValues$1(__spreadValues$1({}, defaultColumnConfig()), field && {
2391
- key: field.id,
2392
- fieldId: field.id,
2393
- title: field.label || field.id,
2394
- // undefined means not yet determined in this routine, not 'unset'
2395
- role: void 0,
2396
- expr: (currentItem) => currentItem[field.id]
2397
- })
2398
- );
2399
- const normalized = mergedFields;
2400
- if (data.data.length > 0 && !mergedFields.some((field) => field.role === "image")) {
2416
+ const specifiedFieldsPartial = [
2417
+ ...tagFieldConfigs("image"),
2418
+ ...tagFieldConfigs("content"),
2419
+ ...tagFieldConfigs("title"),
2420
+ ...tagFieldConfigs("beforeTitle"),
2421
+ ...tagFieldConfigs("afterTitle"),
2422
+ ...tagFieldConfigs("subtitle")
2423
+ ];
2424
+ function doDeriveFieldConfigs(mode) {
2425
+ return dataSources.deriveFieldConfigs(
2426
+ mode === "defaults" ? [] : specifiedFieldsPartial,
2427
+ schema,
2428
+ (field) => __spreadValues$1(__spreadValues$1({}, defaultColumnConfig()), field && {
2429
+ key: field.id,
2430
+ fieldId: field.id,
2431
+ title: field.label || field.id,
2432
+ // undefined means not yet determined in this routine, not 'unset'
2433
+ role: void 0,
2434
+ expr: (currentItem) => currentItem[field.id]
2435
+ })
2436
+ );
2437
+ }
2438
+ const {
2439
+ mergedFields: defaultMergedFields,
2440
+ minimalFullLengthFields: defaultMinimalFullLengthFields
2441
+ } = doDeriveFieldConfigs("defaults");
2442
+ if (data.data.length > 0 && !defaultMergedFields.some((field) => field.role === "image")) {
2401
2443
  const sampleRows = Array.from(
2402
2444
  new Set(
2403
2445
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(
@@ -2405,7 +2447,7 @@ function useRoleDefinitions(data, props) {
2405
2447
  )
2406
2448
  )
2407
2449
  ).map((i) => data.data[i]);
2408
- const imageFieldCandidates = mergedFields.filter(
2450
+ const imageFieldCandidates = defaultMergedFields.filter(
2409
2451
  (field) => !field.role && sampleRows.filter(
2410
2452
  (row) => field.fieldId && isLikeImage(row[field.fieldId])
2411
2453
  ).length >= sampleRows.length / 2
@@ -2429,8 +2471,8 @@ function useRoleDefinitions(data, props) {
2429
2471
  imageField.role = "image";
2430
2472
  }
2431
2473
  }
2432
- if (!mergedFields.some((field) => field.role === "title")) {
2433
- const titleField = mergedFields.find(
2474
+ if (!defaultMergedFields.some((field) => field.role === "title")) {
2475
+ const titleField = defaultMergedFields.find(
2434
2476
  (field) => {
2435
2477
  var _a2;
2436
2478
  return !field.role && ((_a2 = field.fieldId) == null ? void 0 : _a2.toLowerCase().match(/^(title|name|first[ _-]?name|full[ _-]?name)$/));
@@ -2440,8 +2482,8 @@ function useRoleDefinitions(data, props) {
2440
2482
  titleField.role = "title";
2441
2483
  }
2442
2484
  }
2443
- if (!mergedFields.some((field) => field.role === "content")) {
2444
- const contentField = mergedFields.find(
2485
+ if (!defaultMergedFields.some((field) => field.role === "content")) {
2486
+ const contentField = defaultMergedFields.find(
2445
2487
  (field) => {
2446
2488
  var _a2;
2447
2489
  return !field.role && field.fieldId && ((_a2 = schemaMap.get(field.fieldId)) == null ? void 0 : _a2.type) === "string";
@@ -2451,19 +2493,49 @@ function useRoleDefinitions(data, props) {
2451
2493
  contentField.role = "content";
2452
2494
  }
2453
2495
  }
2454
- const roleConfigs = ensure(groupBy__default.default(mergedFields, (f) => f.role));
2496
+ const fieldIdToDefaultRole = new Map(
2497
+ defaultMergedFields.map((f) => [f.fieldId, f.role])
2498
+ );
2499
+ for (const f of defaultMinimalFullLengthFields) {
2500
+ f.role = fieldIdToDefaultRole.get(f.fieldId);
2501
+ }
2502
+ const { mergedFields, minimalFullLengthFields } = doDeriveFieldConfigs("existing");
2503
+ const minimalFullLengthFieldsWithDefaults = [
2504
+ ...minimalFullLengthFields.filter((f) => f.role && f.role !== "unset"),
2505
+ ...defaultMinimalFullLengthFields.filter(
2506
+ (f) => f.role && f.role !== "unset" && !props[f.role]
2507
+ )
2508
+ ];
2509
+ const mergedFieldsWithDefaults = [
2510
+ ...mergedFields.filter((f) => f.role && f.role !== "unset"),
2511
+ ...defaultMergedFields.filter(
2512
+ (f) => f.role && f.role !== "unset" && !props[f.role]
2513
+ )
2514
+ ];
2515
+ console.log("!!derived", {
2516
+ minimalFullLengthFieldsWithDefaults,
2517
+ minimalFullLengthFields,
2518
+ defaultMinimalFullLengthFields,
2519
+ mergedFieldsWithDefaults,
2520
+ mergedFields,
2521
+ defaultMergedFields,
2522
+ props
2523
+ });
2524
+ const roleConfigs = ensure(
2525
+ groupBy__default.default(mergedFieldsWithDefaults, (f) => f.role)
2526
+ );
2455
2527
  const finalRoles = {};
2456
2528
  for (const role of roles) {
2457
2529
  if (role !== "unset") {
2458
2530
  finalRoles[role] = (_d = maybe(props[role], ensureArray)) != null ? _d : roleConfigs[role];
2459
2531
  }
2460
2532
  }
2461
- const fieldIdToRole = new Map(mergedFields.map((f) => [f.fieldId, f.role]));
2462
- for (const f of minimalFullLengthFields) {
2463
- f.role = fieldIdToRole.get(f.fieldId);
2464
- }
2465
- setControlContextData == null ? void 0 : setControlContextData(__spreadProps(__spreadValues$1({}, data), { mergedFields, minimalFullLengthFields }));
2466
- return { normalized, roleConfigs, finalRoles };
2533
+ setControlContextData == null ? void 0 : setControlContextData(__spreadProps(__spreadValues$1({}, data), {
2534
+ mergedFields: mergedFieldsWithDefaults,
2535
+ minimalFullLengthFields: minimalFullLengthFieldsWithDefaults
2536
+ }));
2537
+ const normalized = mergedFieldsWithDefaults;
2538
+ return { normalized, finalRoles };
2467
2539
  }, [fields, data, setControlContextData, rowActions]);
2468
2540
  }
2469
2541
 
@@ -2529,11 +2601,6 @@ const richListMeta = {
2529
2601
  padding: "16px",
2530
2602
  maxHeight: "100%"
2531
2603
  },
2532
- templates: {
2533
- grid: {
2534
- props: {}
2535
- }
2536
- },
2537
2604
  props: __spreadValues({
2538
2605
  data: dataProp(),
2539
2606
  type: {