@elementor/editor-global-classes 4.2.0-921 → 4.2.0-923

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
@@ -44,11 +44,11 @@ module.exports = __toCommonJS(index_exports);
44
44
  var React19 = __toESM(require("react"));
45
45
  var import_react10 = require("react");
46
46
  var import_editor_current_user2 = require("@elementor/editor-current-user");
47
- var import_editor_documents3 = require("@elementor/editor-documents");
47
+ var import_editor_documents4 = require("@elementor/editor-documents");
48
48
  var import_editor_panels = require("@elementor/editor-panels");
49
49
  var import_editor_ui9 = require("@elementor/editor-ui");
50
50
  var import_query2 = require("@elementor/query");
51
- var import_store18 = require("@elementor/store");
51
+ var import_store22 = require("@elementor/store");
52
52
  var import_ui16 = require("@elementor/ui");
53
53
  var import_i18n14 = require("@wordpress/i18n");
54
54
 
@@ -342,7 +342,7 @@ var selectOrderedClasses = (0, import_store.__createSelector)(
342
342
  var selectClass = (state, id) => state[SLICE_NAME].data.items[id] ?? null;
343
343
  var selectEmptyCssClass = (0, import_store.__createSelector)(
344
344
  selectData,
345
- ({ items }) => Object.values(items).filter((cssClass) => cssClass.variants.length === 0)
345
+ ({ items }) => Object.values(items).filter((cssClass) => (cssClass.variants?.length ?? 0) === 0)
346
346
  );
347
347
  var selectIsClassFetched = (state, id) => !!state[SLICE_NAME].initialData.preview.items[id] || !!state[SLICE_NAME].initialData.frontend.items[id] || false;
348
348
 
@@ -1184,7 +1184,7 @@ var FlippedColorSwatchIcon = ({ sx, ...props }) => /* @__PURE__ */ React10.creat
1184
1184
  // src/components/class-manager/global-classes-list.tsx
1185
1185
  var React17 = __toESM(require("react"));
1186
1186
  var import_react8 = require("react");
1187
- var import_store16 = require("@elementor/store");
1187
+ var import_store20 = require("@elementor/store");
1188
1188
  var import_ui14 = require("@elementor/ui");
1189
1189
  var import_react_virtual = require("@tanstack/react-virtual");
1190
1190
  var import_i18n12 = require("@wordpress/i18n");
@@ -1195,6 +1195,115 @@ var useOrderedClasses = () => {
1195
1195
  return (0, import_store14.__useSelector)(selectOrderedClasses);
1196
1196
  };
1197
1197
 
1198
+ // src/load-existing-classes.ts
1199
+ var import_store18 = require("@elementor/store");
1200
+
1201
+ // src/load-document-classes.ts
1202
+ var import_editor_documents2 = require("@elementor/editor-documents");
1203
+ var import_store16 = require("@elementor/store");
1204
+
1205
+ // src/utils/create-labels-for-classes.ts
1206
+ function createLabelsForClasses(entries) {
1207
+ return Object.fromEntries(entries.map((e) => [e.id, e.label]));
1208
+ }
1209
+
1210
+ // src/load-document-classes.ts
1211
+ function styleDefinitionsMapWithoutNull(map) {
1212
+ return Object.fromEntries(
1213
+ Object.entries(map).filter(
1214
+ (entry) => entry[1] !== null
1215
+ )
1216
+ );
1217
+ }
1218
+ function resetGlobalClassesState(globalOrder, classLabels) {
1219
+ (0, import_store16.__dispatch)(
1220
+ slice.actions.load({
1221
+ preview: { items: {}, order: globalOrder },
1222
+ frontend: { items: {}, order: globalOrder },
1223
+ classLabels
1224
+ })
1225
+ );
1226
+ }
1227
+ async function loadCurrentDocumentClasses() {
1228
+ const [previewIndexRes, frontendIndexRes] = await Promise.all([
1229
+ apiClient.all("preview"),
1230
+ apiClient.all("frontend")
1231
+ ]);
1232
+ const previewIndex = previewIndexRes.data.data;
1233
+ const frontendIndex = frontendIndexRes.data.data;
1234
+ const classLabels = createLabelsForClasses(previewIndex);
1235
+ const previewOrder = previewIndex.map((e) => e.id);
1236
+ const frontendOrder = frontendIndex.map((e) => e.id);
1237
+ resetGlobalClassesState(previewOrder, classLabels);
1238
+ const postId = (0, import_editor_documents2.getCurrentDocument)()?.id;
1239
+ if (!postId) {
1240
+ return;
1241
+ }
1242
+ const [previewPostRes, frontendPostRes] = await Promise.all([
1243
+ apiClient.getStylesForPost(postId, "preview"),
1244
+ apiClient.getStylesForPost(postId, "frontend")
1245
+ ]);
1246
+ const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
1247
+ const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
1248
+ (0, import_store16.__dispatch)(
1249
+ slice.actions.load({
1250
+ preview: { items: previewItems, order: previewOrder },
1251
+ frontend: { items: frontendItems, order: frontendOrder },
1252
+ classLabels
1253
+ })
1254
+ );
1255
+ }
1256
+ async function addDocumentClasses(documentId) {
1257
+ const [previewPostRes, frontendPostRes] = await Promise.all([
1258
+ apiClient.getStylesForPost(documentId, "preview"),
1259
+ apiClient.getStylesForPost(documentId, "frontend")
1260
+ ]);
1261
+ const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
1262
+ const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
1263
+ (0, import_store16.__dispatch)(
1264
+ slice.actions.mergeExistingClasses({
1265
+ preview: previewItems,
1266
+ frontend: frontendItems
1267
+ })
1268
+ );
1269
+ }
1270
+
1271
+ // src/load-existing-classes.ts
1272
+ var pendingLoad = null;
1273
+ var pendingIds = /* @__PURE__ */ new Set();
1274
+ async function loadExistingClasses(classIds) {
1275
+ const existingClasses = selectGlobalClasses((0, import_store18.__getState)());
1276
+ const missingIds = classIds.filter((id) => !(id in existingClasses));
1277
+ if (missingIds.length === 0) {
1278
+ return;
1279
+ }
1280
+ missingIds.forEach((id) => pendingIds.add(id));
1281
+ if (pendingLoad) {
1282
+ await pendingLoad;
1283
+ return loadExistingClasses(classIds);
1284
+ }
1285
+ pendingLoad = fetchAndMergeClasses();
1286
+ try {
1287
+ await pendingLoad;
1288
+ } finally {
1289
+ pendingLoad = null;
1290
+ }
1291
+ }
1292
+ async function fetchAndMergeClasses() {
1293
+ const idsToFetch = Array.from(pendingIds);
1294
+ pendingIds.clear();
1295
+ if (idsToFetch.length === 0) {
1296
+ return;
1297
+ }
1298
+ const [previewResponse, frontendResponse] = await Promise.all([
1299
+ apiClient.getStylesByIds(idsToFetch, "preview"),
1300
+ apiClient.getStylesByIds(idsToFetch, "frontend")
1301
+ ]);
1302
+ const previewItems = styleDefinitionsMapWithoutNull(previewResponse.data.data);
1303
+ const frontendItems = styleDefinitionsMapWithoutNull(frontendResponse.data.data);
1304
+ (0, import_store18.__dispatch)(slice.actions.mergeExistingClasses({ preview: previewItems, frontend: frontendItems }));
1305
+ }
1306
+
1198
1307
  // src/components/class-manager/class-item.tsx
1199
1308
  var React15 = __toESM(require("react"));
1200
1309
  var import_react7 = require("react");
@@ -1206,7 +1315,7 @@ var import_i18n10 = require("@wordpress/i18n");
1206
1315
 
1207
1316
  // src/components/css-class-usage/components/css-class-usage-popover.tsx
1208
1317
  var React11 = __toESM(require("react"));
1209
- var import_editor_documents2 = require("@elementor/editor-documents");
1318
+ var import_editor_documents3 = require("@elementor/editor-documents");
1210
1319
  var import_editor_ui5 = require("@elementor/editor-ui");
1211
1320
  var import_icons6 = require("@elementor/icons");
1212
1321
  var import_ui8 = require("@elementor/ui");
@@ -1251,7 +1360,7 @@ var CssClassUsagePopover = ({
1251
1360
  onClose
1252
1361
  }) => {
1253
1362
  const { data: classUsage } = useCssClassUsageByID(cssClassID);
1254
- const onNavigate = (0, import_editor_documents2.__useOpenDocumentInNewTab)();
1363
+ const onNavigate = (0, import_editor_documents3.__useOpenDocumentInNewTab)();
1255
1364
  const cssClassUsageRecords = classUsage?.content.map(
1256
1365
  ({ title, elements, pageId, type }) => ({
1257
1366
  type: "item",
@@ -1865,9 +1974,15 @@ var GlobalClassesList = ({
1865
1974
  search: { debouncedValue: searchValue }
1866
1975
  } = useSearchAndFilters();
1867
1976
  const cssClasses = useOrderedClasses();
1868
- const dispatch7 = (0, import_store16.__useDispatch)();
1977
+ const dispatch7 = (0, import_store20.__useDispatch)();
1869
1978
  const filters = useFilters();
1870
1979
  const [draggedItemId, setDraggedItemId] = (0, import_react8.useState)(null);
1980
+ const [loading, setLoading] = (0, import_react8.useState)({});
1981
+ const addLoadingClass = (classId) => setLoading((prev) => ({ ...prev, [classId]: true }));
1982
+ const removeLoadingClass = (classId) => setLoading((prev) => {
1983
+ const { [classId]: _, ...rest } = prev;
1984
+ return rest;
1985
+ });
1871
1986
  const draggedItemLabel = cssClasses.find((cssClass) => cssClass.id === draggedItemId)?.label ?? "";
1872
1987
  const [classesOrder, reorderClasses] = useReorder(draggedItemId, setDraggedItemId, draggedItemLabel ?? "");
1873
1988
  const filteredCssClasses = useFilteredCssClasses();
@@ -1956,25 +2071,31 @@ var GlobalClassesList = ({
1956
2071
  {
1957
2072
  id: cssClass.id,
1958
2073
  label: cssClass.label,
1959
- renameClass: (newLabel) => {
1960
- trackGlobalClasses({
1961
- event: "classRenamed",
1962
- classId: cssClass.id,
1963
- oldValue: cssClass.label,
1964
- newValue: newLabel,
1965
- source: "class-manager"
1966
- });
1967
- dispatch7(
1968
- slice.actions.update({
1969
- style: {
1970
- id: cssClass.id,
1971
- label: newLabel
1972
- }
1973
- })
1974
- );
2074
+ renameClass: async (newLabel) => {
2075
+ addLoadingClass(cssClass.id);
2076
+ try {
2077
+ trackGlobalClasses({
2078
+ event: "classRenamed",
2079
+ classId: cssClass.id,
2080
+ oldValue: cssClass.label,
2081
+ newValue: newLabel,
2082
+ source: "class-manager"
2083
+ });
2084
+ void await loadExistingClasses([cssClass.id]);
2085
+ dispatch7(
2086
+ slice.actions.update({
2087
+ style: {
2088
+ id: cssClass.id,
2089
+ label: newLabel
2090
+ }
2091
+ })
2092
+ );
2093
+ } finally {
2094
+ removeLoadingClass(cssClass.id);
2095
+ }
1975
2096
  },
1976
2097
  selected: isDragged,
1977
- disabled: disabled || isDragPlaceholder,
2098
+ disabled: disabled || isDragPlaceholder || loading[cssClass.id],
1978
2099
  sortableTriggerProps: {
1979
2100
  ...triggerProps,
1980
2101
  style: triggerStyle
@@ -2014,7 +2135,7 @@ var StyledHeader = (0, import_ui14.styled)(import_ui14.Typography)(({ theme, var
2014
2135
  }
2015
2136
  }));
2016
2137
  var useReorder = (draggedItemId, setDraggedItemId, draggedItemLabel) => {
2017
- const dispatch7 = (0, import_store16.__useDispatch)();
2138
+ const dispatch7 = (0, import_store20.__useDispatch)();
2018
2139
  const order = useClassesOrder();
2019
2140
  const reorder = (newIds) => {
2020
2141
  dispatch7(slice.actions.setOrder(newIds));
@@ -2150,7 +2271,7 @@ function ClassManagerPanelContent({
2150
2271
  const [scrollElement, setScrollElement] = (0, import_react10.useState)(null);
2151
2272
  const { mutateAsync: publish, isPending: isPublishing } = usePublish();
2152
2273
  const resetAndClosePanel = () => {
2153
- (0, import_store18.__dispatch)(slice.actions.resetToInitialState({ context: "frontend" }));
2274
+ (0, import_store22.__dispatch)(slice.actions.resetToInitialState({ context: "frontend" }));
2154
2275
  closeSaveChangesDialog();
2155
2276
  };
2156
2277
  const handleClosePanel = (0, import_react10.useCallback)(() => {
@@ -2174,7 +2295,7 @@ function ClassManagerPanelContent({
2174
2295
  };
2175
2296
  }, []);
2176
2297
  const handleStopSync = (0, import_react10.useCallback)((classId) => {
2177
- (0, import_store18.__dispatch)(
2298
+ (0, import_store22.__dispatch)(
2178
2299
  slice.actions.update({
2179
2300
  style: {
2180
2301
  id: classId,
@@ -2186,7 +2307,7 @@ function ClassManagerPanelContent({
2186
2307
  setStopSyncConfirmation(null);
2187
2308
  }, []);
2188
2309
  const handleStartSync = (0, import_react10.useCallback)((classId) => {
2189
- (0, import_store18.__dispatch)(
2310
+ (0, import_store22.__dispatch)(
2190
2311
  slice.actions.update({
2191
2312
  style: {
2192
2313
  id: classId,
@@ -2324,7 +2445,7 @@ var usePublish = () => {
2324
2445
  return (0, import_query2.useMutation)({
2325
2446
  mutationFn: () => saveGlobalClasses2({ context: "frontend" }),
2326
2447
  onSuccess: async () => {
2327
- (0, import_editor_documents3.setDocumentModifiedStatus)(false);
2448
+ (0, import_editor_documents4.setDocumentModifiedStatus)(false);
2328
2449
  if (hasDeletedItems()) {
2329
2450
  await onDelete();
2330
2451
  }
@@ -2386,110 +2507,6 @@ var getCapabilities = () => {
2386
2507
  }
2387
2508
  };
2388
2509
 
2389
- // src/load-existing-classes.ts
2390
- var import_store22 = require("@elementor/store");
2391
-
2392
- // src/load-document-classes.ts
2393
- var import_editor_documents4 = require("@elementor/editor-documents");
2394
- var import_store20 = require("@elementor/store");
2395
-
2396
- // src/utils/create-labels-for-classes.ts
2397
- function createLabelsForClasses(entries) {
2398
- return Object.fromEntries(entries.map((e) => [e.id, e.label]));
2399
- }
2400
-
2401
- // src/load-document-classes.ts
2402
- function styleDefinitionsMapWithoutNull(map) {
2403
- return Object.fromEntries(
2404
- Object.entries(map).filter(
2405
- (entry) => entry[1] !== null
2406
- )
2407
- );
2408
- }
2409
- function resetGlobalClassesState(globalOrder, classLabels) {
2410
- (0, import_store20.__dispatch)(
2411
- slice.actions.load({
2412
- preview: { items: {}, order: globalOrder },
2413
- frontend: { items: {}, order: globalOrder },
2414
- classLabels
2415
- })
2416
- );
2417
- }
2418
- async function loadCurrentDocumentClasses() {
2419
- const previewIndexRes = await apiClient.all("preview");
2420
- const previewIndex = previewIndexRes.data.data;
2421
- const classLabels = createLabelsForClasses(previewIndex);
2422
- const globalOrder = previewIndex.map((e) => e.id);
2423
- resetGlobalClassesState(globalOrder, classLabels);
2424
- const postId = (0, import_editor_documents4.getCurrentDocument)()?.id;
2425
- if (!postId) {
2426
- return;
2427
- }
2428
- const [previewPostRes, frontendPostRes] = await Promise.all([
2429
- apiClient.getStylesForPost(postId, "preview"),
2430
- apiClient.getStylesForPost(postId, "frontend")
2431
- ]);
2432
- const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
2433
- const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
2434
- (0, import_store20.__dispatch)(
2435
- slice.actions.load({
2436
- preview: { items: previewItems, order: globalOrder },
2437
- frontend: { items: frontendItems, order: globalOrder },
2438
- classLabels
2439
- })
2440
- );
2441
- }
2442
- async function addDocumentClasses(documentId) {
2443
- const [previewPostRes, frontendPostRes] = await Promise.all([
2444
- apiClient.getStylesForPost(documentId, "preview"),
2445
- apiClient.getStylesForPost(documentId, "frontend")
2446
- ]);
2447
- const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
2448
- const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
2449
- (0, import_store20.__dispatch)(
2450
- slice.actions.mergeExistingClasses({
2451
- preview: previewItems,
2452
- frontend: frontendItems
2453
- })
2454
- );
2455
- }
2456
-
2457
- // src/load-existing-classes.ts
2458
- var pendingLoad = null;
2459
- var pendingIds = /* @__PURE__ */ new Set();
2460
- async function loadExistingClasses(classIds) {
2461
- const existingClasses = selectGlobalClasses((0, import_store22.__getState)());
2462
- const missingIds = classIds.filter((id) => !(id in existingClasses));
2463
- if (missingIds.length === 0) {
2464
- return;
2465
- }
2466
- missingIds.forEach((id) => pendingIds.add(id));
2467
- if (pendingLoad) {
2468
- await pendingLoad;
2469
- return loadExistingClasses(classIds);
2470
- }
2471
- pendingLoad = fetchAndMergeClasses();
2472
- try {
2473
- await pendingLoad;
2474
- } finally {
2475
- pendingLoad = null;
2476
- }
2477
- }
2478
- async function fetchAndMergeClasses() {
2479
- const idsToFetch = Array.from(pendingIds);
2480
- pendingIds.clear();
2481
- if (idsToFetch.length === 0) {
2482
- return;
2483
- }
2484
- const [previewResponse, frontendResponse] = await Promise.all([
2485
- apiClient.getStylesByIds(idsToFetch, "preview"),
2486
- apiClient.getStylesByIds(idsToFetch, "frontend")
2487
- ]);
2488
- const previewItems = styleDefinitionsMapWithoutNull(previewResponse.data.data);
2489
- const frontendItems = styleDefinitionsMapWithoutNull(frontendResponse.data.data);
2490
- (0, import_store22.__dispatch)(slice.actions.mergeExistingClasses({ preview: previewItems, frontend: frontendItems }));
2491
- }
2492
-
2493
2510
  // src/global-classes-styles-provider.ts
2494
2511
  var MAX_CLASSES = 1e3;
2495
2512
  var GLOBAL_CLASSES_PROVIDER_KEY = "global-classes";