@firecms/core 3.3.0-canary.1e1cce9 → 3.3.0-canary.289082f
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/app/useApp.d.ts +1 -0
- package/dist/core/DefaultDrawer.d.ts +10 -3
- package/dist/core/field_configs.d.ts +1 -1
- package/dist/form/field_bindings/GeopointFieldBinding.d.ts +5 -0
- package/dist/form/index.d.ts +1 -0
- package/dist/index.es.js +1741 -492
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +1740 -491
- package/dist/index.umd.js.map +1 -1
- package/dist/locales/pl.d.ts +2 -0
- package/dist/preview/index.d.ts +1 -0
- package/dist/preview/property_previews/GeopointPropertyPreview.d.ts +4 -0
- package/dist/util/geopoint.d.ts +22 -0
- package/dist/util/index.d.ts +1 -0
- package/dist/util/navigation_blocking.d.ts +22 -0
- package/dist/util/navigation_from_path.d.ts +10 -0
- package/dist/util/navigation_utils.d.ts +20 -0
- package/package.json +14 -7
- package/src/app/Scaffold.tsx +34 -44
- package/src/app/useApp.tsx +1 -0
- package/src/components/VirtualTable/VirtualTable.tsx +19 -8
- package/src/components/common/useDataSourceTableController.tsx +25 -6
- package/src/core/DefaultDrawer.tsx +150 -64
- package/src/core/DrawerNavigationGroup.tsx +27 -29
- package/src/core/DrawerNavigationItem.tsx +10 -12
- package/src/core/EntityEditView.tsx +57 -32
- package/src/core/field_configs.tsx +15 -0
- package/src/form/field_bindings/GeopointFieldBinding.tsx +139 -0
- package/src/form/index.tsx +1 -0
- package/src/i18n/FireCMSi18nProvider.tsx +2 -0
- package/src/internal/useBuildSideEntityController.tsx +2 -1
- package/src/locales/pl.ts +730 -0
- package/src/preview/PropertyPreview.tsx +12 -0
- package/src/preview/index.ts +1 -0
- package/src/preview/property_previews/GeopointPropertyPreview.tsx +23 -0
- package/src/routes/FireCMSRoute.tsx +44 -25
- package/src/util/entities.ts +2 -0
- package/src/util/geopoint.ts +81 -0
- package/src/util/index.ts +1 -0
- package/src/util/navigation_blocking.ts +45 -0
- package/src/util/navigation_from_path.ts +23 -6
- package/src/util/navigation_utils.ts +36 -2
- package/src/util/parent_references_from_path.ts +4 -2
package/dist/index.umd.js
CHANGED
|
@@ -170,6 +170,12 @@
|
|
|
170
170
|
if (s.startsWith("/")) return s;
|
|
171
171
|
else return `/${s}`;
|
|
172
172
|
}
|
|
173
|
+
function encodeEntityId(entityId) {
|
|
174
|
+
return entityId.replaceAll("%", "%25").replaceAll("/", "%2F").replaceAll("#", "%23").replaceAll("?", "%3F");
|
|
175
|
+
}
|
|
176
|
+
function decodeEntityId(encodedEntityId) {
|
|
177
|
+
return encodedEntityId.replaceAll("%2F", "/").replaceAll("%23", "#").replaceAll("%3F", "?").replaceAll("%25", "%");
|
|
178
|
+
}
|
|
173
179
|
function getLastSegment(path) {
|
|
174
180
|
const cleanPath = removeInitialAndTrailingSlashes(path);
|
|
175
181
|
if (cleanPath.includes("/")) {
|
|
@@ -263,7 +269,7 @@
|
|
|
263
269
|
return result;
|
|
264
270
|
}
|
|
265
271
|
function getCollectionPathsCombinations(subpaths) {
|
|
266
|
-
const entries = subpaths.length > 0 && subpaths.length % 2 === 0 ? subpaths.
|
|
272
|
+
const entries = subpaths.length > 0 && subpaths.length % 2 === 0 ? subpaths.slice(0, subpaths.length - 1) : subpaths;
|
|
267
273
|
const length = entries.length;
|
|
268
274
|
const result = [];
|
|
269
275
|
for (let i = length; i > 0; i = i - 2) {
|
|
@@ -295,7 +301,7 @@
|
|
|
295
301
|
onClose
|
|
296
302
|
});
|
|
297
303
|
} else {
|
|
298
|
-
let to = navigation.buildUrlCollectionPath(entityId ? `${fullIdPath ?? path}/${entityId}` : fullIdPath ?? path);
|
|
304
|
+
let to = navigation.buildUrlCollectionPath(entityId ? `${fullIdPath ?? path}/${encodeEntityId(entityId)}` : fullIdPath ?? path);
|
|
299
305
|
if (entityId && selectedTab) {
|
|
300
306
|
to += `/${selectedTab}`;
|
|
301
307
|
}
|
|
@@ -658,6 +664,8 @@
|
|
|
658
664
|
return [];
|
|
659
665
|
} else if (dataType === "map") {
|
|
660
666
|
return {};
|
|
667
|
+
} else if (dataType === "geopoint") {
|
|
668
|
+
return null;
|
|
661
669
|
} else {
|
|
662
670
|
return null;
|
|
663
671
|
}
|
|
@@ -1117,7 +1125,8 @@
|
|
|
1117
1125
|
path,
|
|
1118
1126
|
collections = [],
|
|
1119
1127
|
currentFullPath,
|
|
1120
|
-
currentFullIdPath
|
|
1128
|
+
currentFullIdPath,
|
|
1129
|
+
currentFullUrlPath
|
|
1121
1130
|
} = props;
|
|
1122
1131
|
const subpaths = removeInitialAndTrailingSlashes(path).split("/");
|
|
1123
1132
|
const subpathCombinations = getCollectionPathsCombinations(subpaths);
|
|
@@ -1131,26 +1140,29 @@
|
|
|
1131
1140
|
}
|
|
1132
1141
|
if (collection) {
|
|
1133
1142
|
const collectionPath = currentFullPath && currentFullPath.length > 0 ? currentFullPath + "/" + collection.path : collection.path;
|
|
1143
|
+
const collectionUrlPath = currentFullUrlPath && currentFullUrlPath.length > 0 ? currentFullUrlPath + "/" + collection.path : collection.path;
|
|
1134
1144
|
const fullIdPath = currentFullIdPath && currentFullIdPath.length > 0 ? currentFullIdPath + "/" + collection.id : collection.id;
|
|
1135
1145
|
result.push({
|
|
1136
1146
|
type: "collection",
|
|
1137
1147
|
id: collection.id,
|
|
1138
1148
|
path: collectionPath,
|
|
1139
|
-
fullPath:
|
|
1149
|
+
fullPath: collectionUrlPath,
|
|
1140
1150
|
fullIdPath,
|
|
1141
1151
|
collection
|
|
1142
1152
|
});
|
|
1143
1153
|
const restOfThePath = removeInitialAndTrailingSlashes(removeInitialAndTrailingSlashes(path).replace(subpathCombination, ""));
|
|
1144
1154
|
const nextSegments = restOfThePath.length > 0 ? restOfThePath.split("/") : [];
|
|
1145
1155
|
if (nextSegments.length > 0) {
|
|
1146
|
-
const
|
|
1156
|
+
const encodedEntityId = nextSegments[0];
|
|
1157
|
+
const entityId = decodeEntityId(encodedEntityId);
|
|
1147
1158
|
const fullPath = collectionPath + "/" + entityId;
|
|
1159
|
+
const fullUrlPath = collectionUrlPath + "/" + encodedEntityId;
|
|
1148
1160
|
result.push({
|
|
1149
1161
|
type: "entity",
|
|
1150
1162
|
entityId,
|
|
1151
1163
|
path: collectionPath,
|
|
1152
1164
|
fullIdPath,
|
|
1153
|
-
fullPath,
|
|
1165
|
+
fullPath: fullUrlPath,
|
|
1154
1166
|
parentCollection: collection
|
|
1155
1167
|
});
|
|
1156
1168
|
if (nextSegments.length > 1) {
|
|
@@ -1166,7 +1178,7 @@
|
|
|
1166
1178
|
path: collectionPath,
|
|
1167
1179
|
entityId,
|
|
1168
1180
|
fullIdPath,
|
|
1169
|
-
fullPath:
|
|
1181
|
+
fullPath: fullUrlPath + "/" + customView.key,
|
|
1170
1182
|
view: customView
|
|
1171
1183
|
});
|
|
1172
1184
|
} else if (collection.subcollections) {
|
|
@@ -1175,6 +1187,7 @@
|
|
|
1175
1187
|
collections: collection.subcollections,
|
|
1176
1188
|
currentFullPath: fullPath,
|
|
1177
1189
|
currentFullIdPath: fullIdPath,
|
|
1190
|
+
currentFullUrlPath: fullUrlPath,
|
|
1178
1191
|
contextEntityViews: props.contextEntityViews
|
|
1179
1192
|
}));
|
|
1180
1193
|
}
|
|
@@ -1579,6 +1592,77 @@
|
|
|
1579
1592
|
function canDeleteEntity(collection, authController, path, entity) {
|
|
1580
1593
|
return resolvePermissions(collection, authController, path, entity)?.delete ?? DEFAULT_PERMISSIONS.delete;
|
|
1581
1594
|
}
|
|
1595
|
+
function toNumber(value) {
|
|
1596
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
1597
|
+
}
|
|
1598
|
+
function getGeoPointCoordinates(value) {
|
|
1599
|
+
if (!value) return void 0;
|
|
1600
|
+
if (value instanceof GeoPoint) {
|
|
1601
|
+
return {
|
|
1602
|
+
latitude: value.latitude,
|
|
1603
|
+
longitude: value.longitude
|
|
1604
|
+
};
|
|
1605
|
+
}
|
|
1606
|
+
if (typeof value !== "object") return void 0;
|
|
1607
|
+
const latitude = toNumber(value.latitude ?? value.lat ?? value._lat);
|
|
1608
|
+
const longitude = toNumber(value.longitude ?? value.lng ?? value._long);
|
|
1609
|
+
if (latitude === void 0 || longitude === void 0) return void 0;
|
|
1610
|
+
return {
|
|
1611
|
+
latitude,
|
|
1612
|
+
longitude
|
|
1613
|
+
};
|
|
1614
|
+
}
|
|
1615
|
+
function normalizeGeoPoint(value) {
|
|
1616
|
+
const coordinates = getGeoPointCoordinates(value);
|
|
1617
|
+
if (!coordinates) return void 0;
|
|
1618
|
+
if (value instanceof GeoPoint) return value;
|
|
1619
|
+
return new GeoPoint(coordinates.latitude, coordinates.longitude);
|
|
1620
|
+
}
|
|
1621
|
+
function formatGeoPoint(value, options) {
|
|
1622
|
+
const coordinates = getGeoPointCoordinates(value);
|
|
1623
|
+
if (!coordinates) return "";
|
|
1624
|
+
const maximumFractionDigits = options?.maximumFractionDigits ?? 6;
|
|
1625
|
+
const formatter = new Intl.NumberFormat("en-US", {
|
|
1626
|
+
maximumFractionDigits,
|
|
1627
|
+
minimumFractionDigits: Math.min(2, maximumFractionDigits),
|
|
1628
|
+
useGrouping: false
|
|
1629
|
+
});
|
|
1630
|
+
return `${formatter.format(coordinates.latitude)}, ${formatter.format(coordinates.longitude)}`;
|
|
1631
|
+
}
|
|
1632
|
+
function parseGeoPoint(input) {
|
|
1633
|
+
const trimmed = input.trim();
|
|
1634
|
+
if (!trimmed) return {
|
|
1635
|
+
point: null
|
|
1636
|
+
};
|
|
1637
|
+
const parts = trimmed.split(",").map((part) => part.trim()).filter((part) => part !== "");
|
|
1638
|
+
if (parts.length !== 2) return {
|
|
1639
|
+
point: null,
|
|
1640
|
+
error: 'Use "lat, lng" format'
|
|
1641
|
+
};
|
|
1642
|
+
const latitude = parseFloat(parts[0]);
|
|
1643
|
+
const longitude = parseFloat(parts[1]);
|
|
1644
|
+
if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {
|
|
1645
|
+
return {
|
|
1646
|
+
point: null,
|
|
1647
|
+
error: "Latitude and longitude must be numbers"
|
|
1648
|
+
};
|
|
1649
|
+
}
|
|
1650
|
+
if (latitude < -90 || latitude > 90) {
|
|
1651
|
+
return {
|
|
1652
|
+
point: null,
|
|
1653
|
+
error: "Latitude must be between -90 and 90"
|
|
1654
|
+
};
|
|
1655
|
+
}
|
|
1656
|
+
if (longitude < -180 || longitude > 180) {
|
|
1657
|
+
return {
|
|
1658
|
+
point: null,
|
|
1659
|
+
error: "Longitude must be between -180 and 180"
|
|
1660
|
+
};
|
|
1661
|
+
}
|
|
1662
|
+
return {
|
|
1663
|
+
point: new GeoPoint(latitude, longitude)
|
|
1664
|
+
};
|
|
1665
|
+
}
|
|
1582
1666
|
const iconSynonyms = {
|
|
1583
1667
|
abc: "alphabet character font letter symbol text type",
|
|
1584
1668
|
access_alarm: "clock time",
|
|
@@ -7232,6 +7316,59 @@
|
|
|
7232
7316
|
typeof childValue === "object" && !isTimestampObj && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls(ui.defaultBorderMixin, "border-l pl-4"), children: /* @__PURE__ */ jsxRuntime.jsx(KeyValuePreview, { value: childValue }) })
|
|
7233
7317
|
] }, `map_preview_table_${key}}`);
|
|
7234
7318
|
}
|
|
7319
|
+
function GeopointPropertyPreview(t0) {
|
|
7320
|
+
const $ = reactCompilerRuntime.c(10);
|
|
7321
|
+
const {
|
|
7322
|
+
value,
|
|
7323
|
+
size
|
|
7324
|
+
} = t0;
|
|
7325
|
+
let t1;
|
|
7326
|
+
let t2;
|
|
7327
|
+
let t3;
|
|
7328
|
+
if ($[0] !== size || $[1] !== value) {
|
|
7329
|
+
t3 = /* @__PURE__ */ Symbol.for("react.early_return_sentinel");
|
|
7330
|
+
bb0: {
|
|
7331
|
+
const coordinates = getGeoPointCoordinates(value);
|
|
7332
|
+
if (!coordinates) {
|
|
7333
|
+
const t42 = size === "small" ? "text-sm text-text-secondary dark:text-text-secondary-dark" : "text-text-secondary dark:text-text-secondary-dark";
|
|
7334
|
+
let t5;
|
|
7335
|
+
if ($[5] !== t42) {
|
|
7336
|
+
t5 = /* @__PURE__ */ jsxRuntime.jsx("span", { className: t42, children: "—" });
|
|
7337
|
+
$[5] = t42;
|
|
7338
|
+
$[6] = t5;
|
|
7339
|
+
} else {
|
|
7340
|
+
t5 = $[6];
|
|
7341
|
+
}
|
|
7342
|
+
t3 = t5;
|
|
7343
|
+
break bb0;
|
|
7344
|
+
}
|
|
7345
|
+
t1 = size === "small" ? "text-sm font-mono" : "font-mono";
|
|
7346
|
+
t2 = formatGeoPoint(coordinates);
|
|
7347
|
+
}
|
|
7348
|
+
$[0] = size;
|
|
7349
|
+
$[1] = value;
|
|
7350
|
+
$[2] = t1;
|
|
7351
|
+
$[3] = t2;
|
|
7352
|
+
$[4] = t3;
|
|
7353
|
+
} else {
|
|
7354
|
+
t1 = $[2];
|
|
7355
|
+
t2 = $[3];
|
|
7356
|
+
t3 = $[4];
|
|
7357
|
+
}
|
|
7358
|
+
if (t3 !== /* @__PURE__ */ Symbol.for("react.early_return_sentinel")) {
|
|
7359
|
+
return t3;
|
|
7360
|
+
}
|
|
7361
|
+
let t4;
|
|
7362
|
+
if ($[7] !== t1 || $[8] !== t2) {
|
|
7363
|
+
t4 = /* @__PURE__ */ jsxRuntime.jsx("span", { className: t1, children: t2 });
|
|
7364
|
+
$[7] = t1;
|
|
7365
|
+
$[8] = t2;
|
|
7366
|
+
$[9] = t4;
|
|
7367
|
+
} else {
|
|
7368
|
+
t4 = $[9];
|
|
7369
|
+
}
|
|
7370
|
+
return t4;
|
|
7371
|
+
}
|
|
7235
7372
|
function BooleanPreview(t0) {
|
|
7236
7373
|
const $ = reactCompilerRuntime.c(9);
|
|
7237
7374
|
const {
|
|
@@ -7659,47 +7796,56 @@
|
|
|
7659
7796
|
content = buildWrongValueType(propertyKey, property.dataType, value);
|
|
7660
7797
|
}
|
|
7661
7798
|
} else {
|
|
7662
|
-
if (property.dataType === "
|
|
7663
|
-
|
|
7664
|
-
|
|
7665
|
-
|
|
7666
|
-
} else {
|
|
7667
|
-
content = buildWrongValueType(propertyKey, property.dataType, value);
|
|
7668
|
-
}
|
|
7799
|
+
if (property.dataType === "geopoint") {
|
|
7800
|
+
const coordinates = getGeoPointCoordinates(value);
|
|
7801
|
+
if (coordinates) {
|
|
7802
|
+
content = /* @__PURE__ */ jsxRuntime.jsx(GeopointPropertyPreview, { ...props, property, value });
|
|
7669
7803
|
} else {
|
|
7670
|
-
|
|
7671
|
-
if ($[27] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
7672
|
-
t02 = /* @__PURE__ */ jsxRuntime.jsx(EmptyValue, {});
|
|
7673
|
-
$[27] = t02;
|
|
7674
|
-
} else {
|
|
7675
|
-
t02 = $[27];
|
|
7676
|
-
}
|
|
7677
|
-
content = t02;
|
|
7804
|
+
content = buildWrongValueType(propertyKey, property.dataType, value);
|
|
7678
7805
|
}
|
|
7679
7806
|
} else {
|
|
7680
|
-
if (property.dataType === "
|
|
7681
|
-
if (typeof
|
|
7682
|
-
|
|
7807
|
+
if (property.dataType === "reference") {
|
|
7808
|
+
if (typeof property.path === "string") {
|
|
7809
|
+
if (typeof value === "object" && "isEntityReference" in value && value.isEntityReference()) {
|
|
7810
|
+
content = /* @__PURE__ */ jsxRuntime.jsx(ReferencePreview, { disabled: !property.path, previewProperties: property.previewProperties, includeId: property.includeId, includeEntityLink: property.includeEntityLink, size: props.size, reference: value });
|
|
7811
|
+
} else {
|
|
7812
|
+
content = buildWrongValueType(propertyKey, property.dataType, value);
|
|
7813
|
+
}
|
|
7683
7814
|
} else {
|
|
7684
|
-
|
|
7815
|
+
let t02;
|
|
7816
|
+
if ($[27] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
7817
|
+
t02 = /* @__PURE__ */ jsxRuntime.jsx(EmptyValue, {});
|
|
7818
|
+
$[27] = t02;
|
|
7819
|
+
} else {
|
|
7820
|
+
t02 = $[27];
|
|
7821
|
+
}
|
|
7822
|
+
content = t02;
|
|
7685
7823
|
}
|
|
7686
7824
|
} else {
|
|
7687
|
-
if (property.dataType === "
|
|
7688
|
-
if (typeof value === "
|
|
7689
|
-
content = /* @__PURE__ */ jsxRuntime.jsx(
|
|
7825
|
+
if (property.dataType === "boolean") {
|
|
7826
|
+
if (typeof value === "boolean") {
|
|
7827
|
+
content = /* @__PURE__ */ jsxRuntime.jsx(BooleanPreview, { value, size, property });
|
|
7690
7828
|
} else {
|
|
7691
7829
|
content = buildWrongValueType(propertyKey, property.dataType, value);
|
|
7692
7830
|
}
|
|
7693
7831
|
} else {
|
|
7694
|
-
|
|
7695
|
-
|
|
7696
|
-
|
|
7697
|
-
|
|
7698
|
-
|
|
7832
|
+
if (property.dataType === "number") {
|
|
7833
|
+
if (typeof value === "number") {
|
|
7834
|
+
content = /* @__PURE__ */ jsxRuntime.jsx(NumberPropertyPreview, { ...props, value, property });
|
|
7835
|
+
} else {
|
|
7836
|
+
content = buildWrongValueType(propertyKey, property.dataType, value);
|
|
7837
|
+
}
|
|
7699
7838
|
} else {
|
|
7700
|
-
t02
|
|
7839
|
+
let t02;
|
|
7840
|
+
if ($[28] !== value) {
|
|
7841
|
+
t02 = JSON.stringify(value, jsonStringifyReplacer);
|
|
7842
|
+
$[28] = value;
|
|
7843
|
+
$[29] = t02;
|
|
7844
|
+
} else {
|
|
7845
|
+
t02 = $[29];
|
|
7846
|
+
}
|
|
7847
|
+
content = t02;
|
|
7701
7848
|
}
|
|
7702
|
-
content = t02;
|
|
7703
7849
|
}
|
|
7704
7850
|
}
|
|
7705
7851
|
}
|
|
@@ -12936,6 +13082,260 @@
|
|
|
12936
13082
|
}
|
|
12937
13083
|
return t13;
|
|
12938
13084
|
}
|
|
13085
|
+
function GeopointFieldBinding(t0) {
|
|
13086
|
+
const $ = reactCompilerRuntime.c(66);
|
|
13087
|
+
const {
|
|
13088
|
+
propertyKey,
|
|
13089
|
+
value,
|
|
13090
|
+
setValue,
|
|
13091
|
+
error,
|
|
13092
|
+
showError,
|
|
13093
|
+
disabled,
|
|
13094
|
+
autoFocus,
|
|
13095
|
+
property,
|
|
13096
|
+
includeDescription,
|
|
13097
|
+
size: t1
|
|
13098
|
+
} = t0;
|
|
13099
|
+
const size = t1 === void 0 ? "large" : t1;
|
|
13100
|
+
const coordinates = getGeoPointCoordinates(value);
|
|
13101
|
+
const canClear = Boolean(property.clearable);
|
|
13102
|
+
const [latitude, setLatitude] = React.useState(coordinates ? coordinates.latitude.toString() : "");
|
|
13103
|
+
const [longitude, setLongitude] = React.useState(coordinates ? coordinates.longitude.toString() : "");
|
|
13104
|
+
const [localError, setLocalError] = React.useState();
|
|
13105
|
+
const skipSyncRef = React.useRef(false);
|
|
13106
|
+
let t2;
|
|
13107
|
+
if ($[0] !== property || $[1] !== setValue || $[2] !== value) {
|
|
13108
|
+
t2 = {
|
|
13109
|
+
property,
|
|
13110
|
+
value,
|
|
13111
|
+
setValue
|
|
13112
|
+
};
|
|
13113
|
+
$[0] = property;
|
|
13114
|
+
$[1] = setValue;
|
|
13115
|
+
$[2] = value;
|
|
13116
|
+
$[3] = t2;
|
|
13117
|
+
} else {
|
|
13118
|
+
t2 = $[3];
|
|
13119
|
+
}
|
|
13120
|
+
useClearRestoreValue(t2);
|
|
13121
|
+
let t3;
|
|
13122
|
+
if ($[4] !== setLatitude || $[5] !== value) {
|
|
13123
|
+
t3 = () => {
|
|
13124
|
+
if (skipSyncRef.current) {
|
|
13125
|
+
skipSyncRef.current = false;
|
|
13126
|
+
return;
|
|
13127
|
+
}
|
|
13128
|
+
const nextCoordinates = getGeoPointCoordinates(value);
|
|
13129
|
+
setLatitude(nextCoordinates ? nextCoordinates.latitude.toString() : "");
|
|
13130
|
+
setLongitude(nextCoordinates ? nextCoordinates.longitude.toString() : "");
|
|
13131
|
+
};
|
|
13132
|
+
$[4] = setLatitude;
|
|
13133
|
+
$[5] = value;
|
|
13134
|
+
$[6] = t3;
|
|
13135
|
+
} else {
|
|
13136
|
+
t3 = $[6];
|
|
13137
|
+
}
|
|
13138
|
+
let t4;
|
|
13139
|
+
if ($[7] !== value) {
|
|
13140
|
+
t4 = [value];
|
|
13141
|
+
$[7] = value;
|
|
13142
|
+
$[8] = t4;
|
|
13143
|
+
} else {
|
|
13144
|
+
t4 = $[8];
|
|
13145
|
+
}
|
|
13146
|
+
React.useEffect(t3, t4);
|
|
13147
|
+
let t5;
|
|
13148
|
+
if ($[9] !== setLatitude || $[10] !== setValue) {
|
|
13149
|
+
t5 = (nextLatitude, nextLongitude) => {
|
|
13150
|
+
skipSyncRef.current = true;
|
|
13151
|
+
setLatitude(nextLatitude);
|
|
13152
|
+
setLongitude(nextLongitude);
|
|
13153
|
+
const trimmedLatitude = nextLatitude.trim();
|
|
13154
|
+
const trimmedLongitude = nextLongitude.trim();
|
|
13155
|
+
if (!trimmedLatitude && !trimmedLongitude) {
|
|
13156
|
+
setLocalError(void 0);
|
|
13157
|
+
setValue(null);
|
|
13158
|
+
return;
|
|
13159
|
+
}
|
|
13160
|
+
const parsed = parseGeoPoint(`${trimmedLatitude}, ${trimmedLongitude}`);
|
|
13161
|
+
if (parsed.error) {
|
|
13162
|
+
setLocalError(parsed.error);
|
|
13163
|
+
setValue(null);
|
|
13164
|
+
return;
|
|
13165
|
+
}
|
|
13166
|
+
setLocalError(void 0);
|
|
13167
|
+
setValue(parsed.point);
|
|
13168
|
+
};
|
|
13169
|
+
$[9] = setLatitude;
|
|
13170
|
+
$[10] = setValue;
|
|
13171
|
+
$[11] = t5;
|
|
13172
|
+
} else {
|
|
13173
|
+
t5 = $[11];
|
|
13174
|
+
}
|
|
13175
|
+
const updateGeoPoint = t5;
|
|
13176
|
+
let t6;
|
|
13177
|
+
if ($[12] !== updateGeoPoint) {
|
|
13178
|
+
t6 = (event) => {
|
|
13179
|
+
if (event) {
|
|
13180
|
+
event.preventDefault();
|
|
13181
|
+
event.stopPropagation();
|
|
13182
|
+
}
|
|
13183
|
+
updateGeoPoint("", "");
|
|
13184
|
+
};
|
|
13185
|
+
$[12] = updateGeoPoint;
|
|
13186
|
+
$[13] = t6;
|
|
13187
|
+
} else {
|
|
13188
|
+
t6 = $[13];
|
|
13189
|
+
}
|
|
13190
|
+
const handleClear = t6;
|
|
13191
|
+
const resolvedError = localError ?? error;
|
|
13192
|
+
const shouldShowError = Boolean(resolvedError) || Boolean(showError && error);
|
|
13193
|
+
let t7;
|
|
13194
|
+
if ($[14] !== property) {
|
|
13195
|
+
t7 = getIconForProperty(property, "small");
|
|
13196
|
+
$[14] = property;
|
|
13197
|
+
$[15] = t7;
|
|
13198
|
+
} else {
|
|
13199
|
+
t7 = $[15];
|
|
13200
|
+
}
|
|
13201
|
+
const t8 = property.validation?.required;
|
|
13202
|
+
const t9 = shouldShowError ? "text-red-500 dark:text-red-500" : "text-text-secondary dark:text-text-secondary-dark";
|
|
13203
|
+
let t10;
|
|
13204
|
+
if ($[16] !== property.name || $[17] !== t7 || $[18] !== t8 || $[19] !== t9) {
|
|
13205
|
+
t10 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsxRuntime.jsx(LabelWithIcon, { icon: t7, required: t8, title: property.name, className: t9 }) });
|
|
13206
|
+
$[16] = property.name;
|
|
13207
|
+
$[17] = t7;
|
|
13208
|
+
$[18] = t8;
|
|
13209
|
+
$[19] = t9;
|
|
13210
|
+
$[20] = t10;
|
|
13211
|
+
} else {
|
|
13212
|
+
t10 = $[20];
|
|
13213
|
+
}
|
|
13214
|
+
let t11;
|
|
13215
|
+
if ($[21] !== longitude || $[22] !== updateGeoPoint) {
|
|
13216
|
+
t11 = (event_0) => updateGeoPoint(event_0.target.value, longitude);
|
|
13217
|
+
$[21] = longitude;
|
|
13218
|
+
$[22] = updateGeoPoint;
|
|
13219
|
+
$[23] = t11;
|
|
13220
|
+
} else {
|
|
13221
|
+
t11 = $[23];
|
|
13222
|
+
}
|
|
13223
|
+
let t12;
|
|
13224
|
+
if ($[24] !== canClear || $[25] !== handleClear) {
|
|
13225
|
+
t12 = canClear ? /* @__PURE__ */ jsxRuntime.jsx(ui.IconButton, { onClick: handleClear, children: /* @__PURE__ */ jsxRuntime.jsx(ui.CloseIcon, {}) }) : void 0;
|
|
13226
|
+
$[24] = canClear;
|
|
13227
|
+
$[25] = handleClear;
|
|
13228
|
+
$[26] = t12;
|
|
13229
|
+
} else {
|
|
13230
|
+
t12 = $[26];
|
|
13231
|
+
}
|
|
13232
|
+
const t13 = shouldShowError && Boolean(resolvedError);
|
|
13233
|
+
let t14;
|
|
13234
|
+
if ($[27] !== autoFocus || $[28] !== disabled || $[29] !== latitude || $[30] !== size || $[31] !== t11 || $[32] !== t12 || $[33] !== t13) {
|
|
13235
|
+
t14 = /* @__PURE__ */ jsxRuntime.jsx(ui.TextField, { size, value: latitude, onChange: t11, autoFocus, label: "Latitude", type: "number", disabled, endAdornment: t12, error: t13 });
|
|
13236
|
+
$[27] = autoFocus;
|
|
13237
|
+
$[28] = disabled;
|
|
13238
|
+
$[29] = latitude;
|
|
13239
|
+
$[30] = size;
|
|
13240
|
+
$[31] = t11;
|
|
13241
|
+
$[32] = t12;
|
|
13242
|
+
$[33] = t13;
|
|
13243
|
+
$[34] = t14;
|
|
13244
|
+
} else {
|
|
13245
|
+
t14 = $[34];
|
|
13246
|
+
}
|
|
13247
|
+
let t15;
|
|
13248
|
+
if ($[35] !== latitude || $[36] !== updateGeoPoint) {
|
|
13249
|
+
t15 = (event_1) => updateGeoPoint(latitude, event_1.target.value);
|
|
13250
|
+
$[35] = latitude;
|
|
13251
|
+
$[36] = updateGeoPoint;
|
|
13252
|
+
$[37] = t15;
|
|
13253
|
+
} else {
|
|
13254
|
+
t15 = $[37];
|
|
13255
|
+
}
|
|
13256
|
+
const t16 = shouldShowError && Boolean(resolvedError);
|
|
13257
|
+
let t17;
|
|
13258
|
+
if ($[38] !== disabled || $[39] !== longitude || $[40] !== size || $[41] !== t15 || $[42] !== t16) {
|
|
13259
|
+
t17 = /* @__PURE__ */ jsxRuntime.jsx(ui.TextField, { size, value: longitude, onChange: t15, label: "Longitude", type: "number", disabled, error: t16 });
|
|
13260
|
+
$[38] = disabled;
|
|
13261
|
+
$[39] = longitude;
|
|
13262
|
+
$[40] = size;
|
|
13263
|
+
$[41] = t15;
|
|
13264
|
+
$[42] = t16;
|
|
13265
|
+
$[43] = t17;
|
|
13266
|
+
} else {
|
|
13267
|
+
t17 = $[43];
|
|
13268
|
+
}
|
|
13269
|
+
let t18;
|
|
13270
|
+
if ($[44] !== t14 || $[45] !== t17) {
|
|
13271
|
+
t18 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-2 md:grid-cols-2", children: [
|
|
13272
|
+
t14,
|
|
13273
|
+
t17
|
|
13274
|
+
] });
|
|
13275
|
+
$[44] = t14;
|
|
13276
|
+
$[45] = t17;
|
|
13277
|
+
$[46] = t18;
|
|
13278
|
+
} else {
|
|
13279
|
+
t18 = $[46];
|
|
13280
|
+
}
|
|
13281
|
+
let t19;
|
|
13282
|
+
if ($[47] !== resolvedError || $[48] !== value) {
|
|
13283
|
+
t19 = value && !resolvedError && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-text-secondary dark:text-text-secondary-dark font-mono", children: formatGeoPoint(value) });
|
|
13284
|
+
$[47] = resolvedError;
|
|
13285
|
+
$[48] = value;
|
|
13286
|
+
$[49] = t19;
|
|
13287
|
+
} else {
|
|
13288
|
+
t19 = $[49];
|
|
13289
|
+
}
|
|
13290
|
+
let t20;
|
|
13291
|
+
if ($[50] !== t10 || $[51] !== t18 || $[52] !== t19) {
|
|
13292
|
+
t20 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
13293
|
+
t10,
|
|
13294
|
+
t18,
|
|
13295
|
+
t19
|
|
13296
|
+
] });
|
|
13297
|
+
$[50] = t10;
|
|
13298
|
+
$[51] = t18;
|
|
13299
|
+
$[52] = t19;
|
|
13300
|
+
$[53] = t20;
|
|
13301
|
+
} else {
|
|
13302
|
+
t20 = $[53];
|
|
13303
|
+
}
|
|
13304
|
+
let t21;
|
|
13305
|
+
if ($[54] !== propertyKey || $[55] !== t20) {
|
|
13306
|
+
t21 = /* @__PURE__ */ jsxRuntime.jsx(PropertyIdCopyTooltip, { propertyKey, children: t20 });
|
|
13307
|
+
$[54] = propertyKey;
|
|
13308
|
+
$[55] = t20;
|
|
13309
|
+
$[56] = t21;
|
|
13310
|
+
} else {
|
|
13311
|
+
t21 = $[56];
|
|
13312
|
+
}
|
|
13313
|
+
let t22;
|
|
13314
|
+
if ($[57] !== disabled || $[58] !== includeDescription || $[59] !== property || $[60] !== resolvedError || $[61] !== shouldShowError) {
|
|
13315
|
+
t22 = /* @__PURE__ */ jsxRuntime.jsx(FieldHelperText, { includeDescription, showError: shouldShowError, error: resolvedError, disabled, property });
|
|
13316
|
+
$[57] = disabled;
|
|
13317
|
+
$[58] = includeDescription;
|
|
13318
|
+
$[59] = property;
|
|
13319
|
+
$[60] = resolvedError;
|
|
13320
|
+
$[61] = shouldShowError;
|
|
13321
|
+
$[62] = t22;
|
|
13322
|
+
} else {
|
|
13323
|
+
t22 = $[62];
|
|
13324
|
+
}
|
|
13325
|
+
let t23;
|
|
13326
|
+
if ($[63] !== t21 || $[64] !== t22) {
|
|
13327
|
+
t23 = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
13328
|
+
t21,
|
|
13329
|
+
t22
|
|
13330
|
+
] });
|
|
13331
|
+
$[63] = t21;
|
|
13332
|
+
$[64] = t22;
|
|
13333
|
+
$[65] = t23;
|
|
13334
|
+
} else {
|
|
13335
|
+
t23 = $[65];
|
|
13336
|
+
}
|
|
13337
|
+
return t23;
|
|
13338
|
+
}
|
|
12939
13339
|
function ReadOnlyFieldBinding(t0) {
|
|
12940
13340
|
const $ = reactCompilerRuntime.c(18);
|
|
12941
13341
|
const {
|
|
@@ -18086,7 +18486,7 @@
|
|
|
18086
18486
|
const currentSort = sortBy ? sortBy[1] : void 0;
|
|
18087
18487
|
const [columns, setColumns] = React.useState(columnsProp);
|
|
18088
18488
|
const tableRef = React.useRef(null);
|
|
18089
|
-
const
|
|
18489
|
+
const lastEndReachedDataLength = React.useRef(void 0);
|
|
18090
18490
|
const debouncedScroll = useDebounceCallback(onScrollProp, 200);
|
|
18091
18491
|
const [draggingColumnId, setDraggingColumnId] = React.useState(null);
|
|
18092
18492
|
const sensors = core.useSensors(core.useSensor(core.PointerSensor, {
|
|
@@ -18165,7 +18565,7 @@
|
|
|
18165
18565
|
filterRef.current = filterInput;
|
|
18166
18566
|
}, [filterInput]);
|
|
18167
18567
|
const scrollToTop = React.useCallback(() => {
|
|
18168
|
-
|
|
18568
|
+
lastEndReachedDataLength.current = void 0;
|
|
18169
18569
|
if (tableRef.current) {
|
|
18170
18570
|
tableRef.current.scrollTo(tableRef.current?.scrollLeft, 0);
|
|
18171
18571
|
}
|
|
@@ -18191,28 +18591,37 @@
|
|
|
18191
18591
|
scrollToTop();
|
|
18192
18592
|
}, [checkFilterCombination, currentSort, onFilterUpdate, onResetPagination, onSortByUpdate, scrollToTop, sortByProperty]);
|
|
18193
18593
|
const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);
|
|
18194
|
-
const onEndReachedInternal = React.useCallback((
|
|
18195
|
-
|
|
18196
|
-
|
|
18594
|
+
const onEndReachedInternal = React.useCallback(() => {
|
|
18595
|
+
const dataLength = data?.length ?? 0;
|
|
18596
|
+
if (onEndReached && dataLength > 0 && lastEndReachedDataLength.current !== dataLength) {
|
|
18597
|
+
lastEndReachedDataLength.current = dataLength;
|
|
18197
18598
|
onEndReached();
|
|
18198
18599
|
}
|
|
18199
18600
|
}, [data?.length, onEndReached]);
|
|
18601
|
+
React.useEffect(() => {
|
|
18602
|
+
if (!onEndReached || loading || !data?.length || !bounds.height || !tableRef.current) {
|
|
18603
|
+
return;
|
|
18604
|
+
}
|
|
18605
|
+
if (tableRef.current.scrollHeight <= tableRef.current.clientHeight) {
|
|
18606
|
+
onEndReachedInternal();
|
|
18607
|
+
}
|
|
18608
|
+
}, [bounds.height, data?.length, loading, onEndReached, onEndReachedInternal]);
|
|
18200
18609
|
const onScroll = React.useCallback(({
|
|
18201
18610
|
scrollDirection,
|
|
18202
|
-
scrollOffset
|
|
18611
|
+
scrollOffset,
|
|
18203
18612
|
scrollUpdateWasRequested
|
|
18204
18613
|
}) => {
|
|
18205
18614
|
if (onScrollProp) {
|
|
18206
18615
|
debouncedScroll({
|
|
18207
18616
|
scrollDirection,
|
|
18208
|
-
scrollOffset
|
|
18617
|
+
scrollOffset,
|
|
18209
18618
|
scrollUpdateWasRequested
|
|
18210
18619
|
});
|
|
18211
18620
|
}
|
|
18212
|
-
if (!scrollUpdateWasRequested &&
|
|
18213
|
-
}, [maxScroll, onEndReachedInternal]);
|
|
18621
|
+
if (!scrollUpdateWasRequested && scrollOffset >= maxScroll - endOffset) onEndReachedInternal();
|
|
18622
|
+
}, [endOffset, maxScroll, onEndReachedInternal]);
|
|
18214
18623
|
const onFilterUpdateInternal = React.useCallback((column_1, filterForProperty) => {
|
|
18215
|
-
|
|
18624
|
+
lastEndReachedDataLength.current = void 0;
|
|
18216
18625
|
const filter_0 = filterRef.current;
|
|
18217
18626
|
let newFilterValue = filter_0 ? {
|
|
18218
18627
|
...filter_0
|
|
@@ -19619,7 +20028,7 @@
|
|
|
19619
20028
|
}
|
|
19620
20029
|
if (encodedValue !== void 0) {
|
|
19621
20030
|
entries[encodeURIComponent(`${key}_op`)] = encodeURIComponent(op);
|
|
19622
|
-
entries[encodeURIComponent(`${key}_value`)] = encodedValue ? encodeURIComponent(encodedValue.toString()) : "null";
|
|
20031
|
+
entries[encodeURIComponent(`${key}_value`)] = encodedValue !== null && encodedValue !== void 0 ? encodeURIComponent(encodedValue.toString()) : "null";
|
|
19623
20032
|
}
|
|
19624
20033
|
}
|
|
19625
20034
|
});
|
|
@@ -19659,7 +20068,12 @@
|
|
|
19659
20068
|
return date.toISOString() === dateString;
|
|
19660
20069
|
}
|
|
19661
20070
|
function encodeRef(val) {
|
|
19662
|
-
return `ref::${val.path}/${val.id}`;
|
|
20071
|
+
return `ref::${val.path}/${encodeEntityId(val.id)}`;
|
|
20072
|
+
}
|
|
20073
|
+
function decodeRef(encoded) {
|
|
20074
|
+
const separatorIndex = encoded.lastIndexOf("/");
|
|
20075
|
+
if (separatorIndex < 0) return new EntityReference(encoded, "");
|
|
20076
|
+
return new EntityReference(decodeEntityId(encoded.substring(separatorIndex + 1)), encoded.substring(0, separatorIndex));
|
|
19663
20077
|
}
|
|
19664
20078
|
function decodeString(val) {
|
|
19665
20079
|
let parsedFilterVal = val;
|
|
@@ -19673,8 +20087,7 @@
|
|
|
19673
20087
|
try {
|
|
19674
20088
|
parsedFilterVal = JSON.parse(parsedFilterVal, (key, value) => {
|
|
19675
20089
|
if (typeof value === "string" && value.startsWith("ref::")) {
|
|
19676
|
-
|
|
19677
|
-
return new EntityReference(id, path);
|
|
20090
|
+
return decodeRef(value.substring(5));
|
|
19678
20091
|
}
|
|
19679
20092
|
return value;
|
|
19680
20093
|
});
|
|
@@ -19682,8 +20095,7 @@
|
|
|
19682
20095
|
}
|
|
19683
20096
|
}
|
|
19684
20097
|
if (typeof parsedFilterVal === "string" && parsedFilterVal.startsWith("ref::")) {
|
|
19685
|
-
|
|
19686
|
-
return new EntityReference(id, path);
|
|
20098
|
+
return decodeRef(parsedFilterVal.substring(5));
|
|
19687
20099
|
}
|
|
19688
20100
|
return parsedFilterVal;
|
|
19689
20101
|
}
|
|
@@ -27874,7 +28286,7 @@
|
|
|
27874
28286
|
const restOfThePath = removeInitialAndTrailingSlashes(removeInitialAndTrailingSlashes(path).replace(subpathCombination, ""));
|
|
27875
28287
|
const nextSegments = restOfThePath.length > 0 ? restOfThePath.split("/") : [];
|
|
27876
28288
|
if (nextSegments.length > 0) {
|
|
27877
|
-
const entityId = nextSegments[0];
|
|
28289
|
+
const entityId = decodeEntityId(nextSegments[0]);
|
|
27878
28290
|
const fullPath = collectionPath + "/" + entityId;
|
|
27879
28291
|
result.push(new EntityReference(entityId, collectionPath));
|
|
27880
28292
|
if (nextSegments.length > 1) {
|
|
@@ -29620,18 +30032,15 @@
|
|
|
29620
30032
|
const actionsAtTheBottom = !largeLayout || layout === "side_panel" || selectedEntityView?.includeActions === "bottom";
|
|
29621
30033
|
const mainViewVisible = selectedTab === MAIN_TAB_VALUE || Boolean(selectedSecondaryForm);
|
|
29622
30034
|
const authController = useAuthController();
|
|
29623
|
-
const
|
|
29624
|
-
|
|
29625
|
-
|
|
29626
|
-
|
|
29627
|
-
|
|
29628
|
-
|
|
29629
|
-
|
|
29630
|
-
if (!entityId) {
|
|
29631
|
-
return null;
|
|
29632
|
-
}
|
|
30035
|
+
const mountedTabsRef = React.useRef(/* @__PURE__ */ new Set());
|
|
30036
|
+
if (selectedTab) {
|
|
30037
|
+
mountedTabsRef.current.add(selectedTab);
|
|
30038
|
+
}
|
|
30039
|
+
const readOnlyFormContext = React.useMemo(() => {
|
|
30040
|
+
if (formContext) return void 0;
|
|
30041
|
+
if (!entityId) return void 0;
|
|
29633
30042
|
const formexStub = createFormexStub(usedEntity?.values ?? {});
|
|
29634
|
-
|
|
30043
|
+
return {
|
|
29635
30044
|
entityId,
|
|
29636
30045
|
disabled: false,
|
|
29637
30046
|
openEntityMode: layout,
|
|
@@ -29657,18 +30066,34 @@
|
|
|
29657
30066
|
savingError: void 0,
|
|
29658
30067
|
formex: formexStub
|
|
29659
30068
|
};
|
|
30069
|
+
}, [formContext, entityId, layout, status, usedEntity, collection, path, customizationController.propertyConfigs, authController]);
|
|
30070
|
+
const customViewsView = customViews && resolvedEntityViews.filter((e) => !e.includeActions).map((customView) => {
|
|
30071
|
+
if (!customView) return null;
|
|
30072
|
+
const Builder = customView.Builder;
|
|
30073
|
+
if (!Builder) {
|
|
30074
|
+
console.error("INTERNAL: customView.Builder is not defined");
|
|
30075
|
+
return null;
|
|
30076
|
+
}
|
|
30077
|
+
if (!entityId) {
|
|
30078
|
+
return null;
|
|
30079
|
+
}
|
|
30080
|
+
const isActive = selectedTab === customView.key;
|
|
30081
|
+
if (!isActive && !mountedTabsRef.current.has(customView.key)) {
|
|
30082
|
+
return null;
|
|
30083
|
+
}
|
|
30084
|
+
const usedFormContext = formContext ?? readOnlyFormContext;
|
|
29660
30085
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls(ui.defaultBorderMixin, "relative flex-1 w-full h-full overflow-auto", {
|
|
29661
|
-
"hidden":
|
|
30086
|
+
"hidden": !isActive
|
|
29662
30087
|
}), role: "tabpanel", children: /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary, { children: usedFormContext && /* @__PURE__ */ jsxRuntime.jsx(Builder, { collection, parentCollectionIds, entity: usedEntity, modifiedValues: usedFormContext?.formex?.values ?? usedEntity?.values, formContext: usedFormContext }) }) }, `custom_view_${customView.key}`);
|
|
29663
30088
|
}).filter(Boolean);
|
|
29664
30089
|
const globalLoading = dataLoading && !usedEntity;
|
|
29665
|
-
const jsonView = /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("relative flex-1 h-full overflow-auto w-full", {
|
|
30090
|
+
const jsonView = selectedTab === JSON_TAB_VALUE || mountedTabsRef.current.has(JSON_TAB_VALUE) ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("relative flex-1 h-full overflow-auto w-full", {
|
|
29666
30091
|
"hidden": selectedTab !== JSON_TAB_VALUE
|
|
29667
|
-
}), role: "tabpanel", children: /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary, { children: /* @__PURE__ */ jsxRuntime.jsx(EntityJsonPreview, { values: formContext?.values ?? entity?.values ?? {} }) }) }, "json_view");
|
|
30092
|
+
}), role: "tabpanel", children: /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary, { children: /* @__PURE__ */ jsxRuntime.jsx(EntityJsonPreview, { values: formContext?.values ?? entity?.values ?? {} }) }) }, "json_view") : null;
|
|
29668
30093
|
const subCollectionsViews = subcollections && subcollections.map((subcollection) => {
|
|
29669
30094
|
const subcollectionId = subcollection.id ?? subcollection.path;
|
|
29670
30095
|
const newFullPath = usedEntity ? `${path}/${usedEntity?.id}/${removeInitialAndTrailingSlashes(subcollection.path)}` : void 0;
|
|
29671
|
-
const newFullIdPath = fullIdPath ? `${fullIdPath}/${usedEntity
|
|
30096
|
+
const newFullIdPath = fullIdPath && usedEntity ? `${fullIdPath}/${encodeEntityId(usedEntity.id)}/${removeInitialAndTrailingSlashes(subcollectionId)}` : void 0;
|
|
29672
30097
|
if (selectedTab !== subcollectionId) return null;
|
|
29673
30098
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1 h-full overflow-auto w-full", role: "tabpanel", children: [
|
|
29674
30099
|
globalLoading && /* @__PURE__ */ jsxRuntime.jsx(CircularProgressCenter, {}),
|
|
@@ -29712,8 +30137,8 @@
|
|
|
29712
30137
|
const customViewTabsStart = resolvedEntityViews.filter((view) => view.position === "start" && !groupedViews.includes(view.key)).map((view_0) => /* @__PURE__ */ jsxRuntime.jsx(ui.Tab, { className: !view_0.tabComponent ? "text-sm min-w-[120px]" : void 0, value: view_0.key, children: view_0.tabComponent ?? view_0.name }, `entity_detail_collection_tab_${view_0.name}`));
|
|
29713
30138
|
const customViewTabsEnd = resolvedEntityViews.filter((view_1) => (!view_1.position || view_1.position === "end") && !groupedViews.includes(view_1.key)).map((view_2) => /* @__PURE__ */ jsxRuntime.jsx(ui.Tab, { className: !view_2.tabComponent ? "text-sm min-w-[120px]" : void 0, value: view_2.key, children: view_2.tabComponent ?? view_2.name }, `entity_detail_collection_tab_${view_2.name}`));
|
|
29714
30139
|
const viewGroupMenus = collection.viewGroups?.map((group) => {
|
|
29715
|
-
const
|
|
29716
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Menu, { trigger: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: ui.cls("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-white transition-all", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400 focus-visible:ring-offset-2", "disabled:pointer-events-none disabled:opacity-50",
|
|
30140
|
+
const isActive_0 = group.views.includes(selectedTab);
|
|
30141
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ui.Menu, { trigger: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: ui.cls("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-white transition-all", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400 focus-visible:ring-offset-2", "disabled:pointer-events-none disabled:opacity-50", isActive_0 ? "bg-white text-surface-900 dark:bg-surface-950 dark:text-surface-50" : "text-surface-600 dark:text-surface-400 hover:bg-surface-200 dark:hover:bg-surface-800"), children: [
|
|
29717
30142
|
group.name,
|
|
29718
30143
|
/* @__PURE__ */ jsxRuntime.jsx(ui.ExpandMoreIcon, { className: "ml-1 -mr-1", size: "small" })
|
|
29719
30144
|
] }), children: group.views.map((viewId) => {
|
|
@@ -29957,7 +30382,7 @@
|
|
|
29957
30382
|
}
|
|
29958
30383
|
const propsToSidePanel = (props, buildUrlCollectionPath, resolveIdsFrom, smallLayout, customizationController, authController, locationSearch) => {
|
|
29959
30384
|
const collectionPath = removeInitialAndTrailingSlashes(props.path);
|
|
29960
|
-
const urlPath = props.entityId ? buildUrlCollectionPath(`${collectionPath}/${props.entityId}${props.selectedTab ? "/" + props.selectedTab : ""}${locationSearch}#${SIDE_URL_HASH}`) : buildUrlCollectionPath(`${collectionPath}${locationSearch}#${NEW_URL_HASH}`);
|
|
30385
|
+
const urlPath = props.entityId ? buildUrlCollectionPath(`${collectionPath}/${encodeEntityId(props.entityId)}${props.selectedTab ? "/" + props.selectedTab : ""}${locationSearch}#${SIDE_URL_HASH}`) : buildUrlCollectionPath(`${collectionPath}${locationSearch}#${NEW_URL_HASH}`);
|
|
29961
30386
|
const resolvedPanelProps = {
|
|
29962
30387
|
...props,
|
|
29963
30388
|
formProps: props.formProps
|
|
@@ -30671,7 +31096,7 @@
|
|
|
30671
31096
|
return t1;
|
|
30672
31097
|
}
|
|
30673
31098
|
function DrawerNavigationItem(t0) {
|
|
30674
|
-
const $ = reactCompilerRuntime.c(
|
|
31099
|
+
const $ = reactCompilerRuntime.c(22);
|
|
30675
31100
|
const {
|
|
30676
31101
|
name,
|
|
30677
31102
|
icon,
|
|
@@ -30683,7 +31108,7 @@
|
|
|
30683
31108
|
} = t0;
|
|
30684
31109
|
let t1;
|
|
30685
31110
|
if ($[0] !== icon) {
|
|
30686
|
-
t1 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "
|
|
31111
|
+
t1 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 flex items-center justify-center w-[44px] h-[30px] text-surface-500 dark:text-text-secondary-dark group-hover/nav:text-primary transition-colors duration-150", children: icon });
|
|
30687
31112
|
$[0] = icon;
|
|
30688
31113
|
$[1] = t1;
|
|
30689
31114
|
} else {
|
|
@@ -30708,7 +31133,7 @@
|
|
|
30708
31133
|
const {
|
|
30709
31134
|
isActive
|
|
30710
31135
|
} = t52;
|
|
30711
|
-
return ui.cls("rounded-lg truncate", "hover:bg-
|
|
31136
|
+
return ui.cls("rounded-lg truncate group/nav", "hover:bg-primary/5 dark:hover:bg-primary/5 text-surface-700 dark:text-surface-300 hover:text-surface-900 dark:hover:text-white", "flex flex-row items-center", drawerOpen ? "pr-4 h-[30px]" : "h-[30px]", "font-medium text-[13px]", isActive ? "bg-primary/8 dark:bg-primary/10 text-primary dark:text-primary [&_div]:text-primary" : "");
|
|
30712
31137
|
};
|
|
30713
31138
|
$[4] = drawerOpen;
|
|
30714
31139
|
$[5] = t4;
|
|
@@ -30718,61 +31143,53 @@
|
|
|
30718
31143
|
const t5 = drawerOpen ? "opacity-100" : "opacity-0 hidden";
|
|
30719
31144
|
let t6;
|
|
30720
31145
|
if ($[6] !== t5) {
|
|
30721
|
-
t6 = ui.cls("text-
|
|
31146
|
+
t6 = ui.cls("text-surface-700 dark:text-surface-300", t5, "font-inherit truncate space-x-2");
|
|
30722
31147
|
$[6] = t5;
|
|
30723
31148
|
$[7] = t6;
|
|
30724
31149
|
} else {
|
|
30725
31150
|
t6 = $[7];
|
|
30726
31151
|
}
|
|
30727
31152
|
let t7;
|
|
30728
|
-
if ($[8] !== name) {
|
|
30729
|
-
t7 =
|
|
31153
|
+
if ($[8] !== name || $[9] !== t6) {
|
|
31154
|
+
t7 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: t6, children: name });
|
|
30730
31155
|
$[8] = name;
|
|
30731
|
-
$[9] =
|
|
31156
|
+
$[9] = t6;
|
|
31157
|
+
$[10] = t7;
|
|
30732
31158
|
} else {
|
|
30733
|
-
t7 = $[
|
|
31159
|
+
t7 = $[10];
|
|
30734
31160
|
}
|
|
30735
31161
|
let t8;
|
|
30736
|
-
if ($[
|
|
30737
|
-
t8 = /* @__PURE__ */ jsxRuntime.jsx("div", { className:
|
|
30738
|
-
$[10] = t6;
|
|
30739
|
-
$[11] = t7;
|
|
30740
|
-
$[12] = t8;
|
|
30741
|
-
} else {
|
|
30742
|
-
t8 = $[12];
|
|
30743
|
-
}
|
|
30744
|
-
let t9;
|
|
30745
|
-
if ($[13] !== iconWrap || $[14] !== onClick || $[15] !== t3 || $[16] !== t4 || $[17] !== t8 || $[18] !== url) {
|
|
30746
|
-
t9 = /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.NavLink, { onClick, style: t3, className: t4, to: url, children: [
|
|
31162
|
+
if ($[11] !== iconWrap || $[12] !== onClick || $[13] !== t3 || $[14] !== t4 || $[15] !== t7 || $[16] !== url) {
|
|
31163
|
+
t8 = /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.NavLink, { onClick, style: t3, className: t4, to: url, children: [
|
|
30747
31164
|
iconWrap,
|
|
30748
|
-
|
|
31165
|
+
t7
|
|
30749
31166
|
] }) });
|
|
30750
|
-
$[
|
|
30751
|
-
$[
|
|
30752
|
-
$[
|
|
30753
|
-
$[
|
|
31167
|
+
$[11] = iconWrap;
|
|
31168
|
+
$[12] = onClick;
|
|
31169
|
+
$[13] = t3;
|
|
31170
|
+
$[14] = t4;
|
|
31171
|
+
$[15] = t7;
|
|
31172
|
+
$[16] = url;
|
|
30754
31173
|
$[17] = t8;
|
|
30755
|
-
$[18] = url;
|
|
30756
|
-
$[19] = t9;
|
|
30757
31174
|
} else {
|
|
30758
|
-
|
|
31175
|
+
t8 = $[17];
|
|
30759
31176
|
}
|
|
30760
|
-
const listItem =
|
|
30761
|
-
const
|
|
30762
|
-
let
|
|
30763
|
-
if ($[
|
|
30764
|
-
|
|
30765
|
-
$[
|
|
30766
|
-
$[
|
|
30767
|
-
$[
|
|
30768
|
-
$[
|
|
31177
|
+
const listItem = t8;
|
|
31178
|
+
const t9 = drawerOpen || adminMenuOpen ? false : tooltipsOpen;
|
|
31179
|
+
let t10;
|
|
31180
|
+
if ($[18] !== listItem || $[19] !== name || $[20] !== t9) {
|
|
31181
|
+
t10 = /* @__PURE__ */ jsxRuntime.jsx(ui.Tooltip, { open: t9, side: "right", title: name, children: listItem });
|
|
31182
|
+
$[18] = listItem;
|
|
31183
|
+
$[19] = name;
|
|
31184
|
+
$[20] = t9;
|
|
31185
|
+
$[21] = t10;
|
|
30769
31186
|
} else {
|
|
30770
|
-
|
|
31187
|
+
t10 = $[21];
|
|
30771
31188
|
}
|
|
30772
|
-
return
|
|
31189
|
+
return t10;
|
|
30773
31190
|
}
|
|
30774
31191
|
function DrawerNavigationGroup(t0) {
|
|
30775
|
-
const $ = reactCompilerRuntime.c(
|
|
31192
|
+
const $ = reactCompilerRuntime.c(41);
|
|
30776
31193
|
const {
|
|
30777
31194
|
group,
|
|
30778
31195
|
entries,
|
|
@@ -30788,86 +31205,137 @@
|
|
|
30788
31205
|
t
|
|
30789
31206
|
} = useTranslation();
|
|
30790
31207
|
const t1 = `drawer_group_${group}`;
|
|
30791
|
-
|
|
30792
|
-
|
|
30793
|
-
|
|
30794
|
-
|
|
30795
|
-
|
|
30796
|
-
|
|
30797
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full" });
|
|
30798
|
-
$[0] = collapsed;
|
|
30799
|
-
$[1] = drawerOpen;
|
|
30800
|
-
$[2] = group;
|
|
30801
|
-
$[3] = headerActions;
|
|
30802
|
-
$[4] = onToggleCollapsed;
|
|
30803
|
-
$[5] = t;
|
|
30804
|
-
$[6] = t2;
|
|
31208
|
+
const t2 = drawerOpen ? "cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-800/40 rounded-lg" : "opacity-0 invisible pointer-events-none";
|
|
31209
|
+
let t3;
|
|
31210
|
+
if ($[0] !== t2) {
|
|
31211
|
+
t3 = ui.cls("pl-3 pr-2 py-0.5 flex flex-row items-center transition-colors", t2);
|
|
31212
|
+
$[0] = t2;
|
|
31213
|
+
$[1] = t3;
|
|
30805
31214
|
} else {
|
|
30806
|
-
|
|
31215
|
+
t3 = $[1];
|
|
30807
31216
|
}
|
|
30808
|
-
const
|
|
30809
|
-
|
|
30810
|
-
|
|
30811
|
-
|
|
30812
|
-
|
|
30813
|
-
$[
|
|
31217
|
+
const t4 = drawerOpen ? onToggleCollapsed : void 0;
|
|
31218
|
+
const t5 = collapsed ? "-rotate-90" : "rotate-0";
|
|
31219
|
+
let t6;
|
|
31220
|
+
if ($[2] !== t5) {
|
|
31221
|
+
t6 = ui.cls("text-surface-400 dark:text-surface-400 transition-transform duration-200 mr-1", t5);
|
|
31222
|
+
$[2] = t5;
|
|
31223
|
+
$[3] = t6;
|
|
30814
31224
|
} else {
|
|
30815
|
-
|
|
31225
|
+
t6 = $[3];
|
|
30816
31226
|
}
|
|
30817
|
-
let
|
|
30818
|
-
if ($[
|
|
30819
|
-
|
|
30820
|
-
|
|
30821
|
-
|
|
30822
|
-
|
|
30823
|
-
|
|
30824
|
-
|
|
30825
|
-
|
|
30826
|
-
|
|
30827
|
-
|
|
31227
|
+
let t7;
|
|
31228
|
+
if ($[4] !== t6) {
|
|
31229
|
+
t7 = /* @__PURE__ */ jsxRuntime.jsx(ui.ExpandMoreIcon, { size: "smallest", className: t6 });
|
|
31230
|
+
$[4] = t6;
|
|
31231
|
+
$[5] = t7;
|
|
31232
|
+
} else {
|
|
31233
|
+
t7 = $[5];
|
|
31234
|
+
}
|
|
31235
|
+
let t8;
|
|
31236
|
+
if ($[6] !== group || $[7] !== t) {
|
|
31237
|
+
t8 = group && group !== "__default__" ? group : t("views_group");
|
|
31238
|
+
$[6] = group;
|
|
31239
|
+
$[7] = t;
|
|
31240
|
+
$[8] = t8;
|
|
31241
|
+
} else {
|
|
31242
|
+
t8 = $[8];
|
|
31243
|
+
}
|
|
31244
|
+
let t9;
|
|
31245
|
+
if ($[9] !== t8) {
|
|
31246
|
+
t9 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { variant: "caption", color: "secondary", className: "font-semibold text-[11px] uppercase tracking-wider flex-grow line-clamp-1 text-surface-400 dark:text-surface-400", children: t8 });
|
|
31247
|
+
$[9] = t8;
|
|
31248
|
+
$[10] = t9;
|
|
31249
|
+
} else {
|
|
31250
|
+
t9 = $[10];
|
|
31251
|
+
}
|
|
31252
|
+
let t10;
|
|
31253
|
+
if ($[11] !== headerActions) {
|
|
31254
|
+
t10 = headerActions && /* @__PURE__ */ jsxRuntime.jsx("div", { onClick: _temp$a, children: headerActions });
|
|
31255
|
+
$[11] = headerActions;
|
|
31256
|
+
$[12] = t10;
|
|
31257
|
+
} else {
|
|
31258
|
+
t10 = $[12];
|
|
31259
|
+
}
|
|
31260
|
+
let t11;
|
|
31261
|
+
if ($[13] !== t10 || $[14] !== t3 || $[15] !== t4 || $[16] !== t7 || $[17] !== t9) {
|
|
31262
|
+
t11 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: t3, onClick: t4, children: [
|
|
31263
|
+
t7,
|
|
31264
|
+
t9,
|
|
31265
|
+
t10
|
|
31266
|
+
] });
|
|
31267
|
+
$[13] = t10;
|
|
31268
|
+
$[14] = t3;
|
|
31269
|
+
$[15] = t4;
|
|
31270
|
+
$[16] = t7;
|
|
31271
|
+
$[17] = t9;
|
|
31272
|
+
$[18] = t11;
|
|
31273
|
+
} else {
|
|
31274
|
+
t11 = $[18];
|
|
31275
|
+
}
|
|
31276
|
+
const t12 = collapsed ? "max-h-0 opacity-0" : "max-h-[2000px] opacity-100";
|
|
31277
|
+
let t13;
|
|
31278
|
+
if ($[19] !== t12) {
|
|
31279
|
+
t13 = ui.cls("transition-all duration-200 ease-in-out overflow-hidden rounded-lg", t12);
|
|
31280
|
+
$[19] = t12;
|
|
31281
|
+
$[20] = t13;
|
|
31282
|
+
} else {
|
|
31283
|
+
t13 = $[20];
|
|
31284
|
+
}
|
|
31285
|
+
let t14;
|
|
31286
|
+
if ($[21] !== adminMenuOpen || $[22] !== collapsed || $[23] !== drawerOpen || $[24] !== entries || $[25] !== onItemClick || $[26] !== tooltipsOpen) {
|
|
31287
|
+
let t152;
|
|
31288
|
+
if ($[28] !== adminMenuOpen || $[29] !== collapsed || $[30] !== drawerOpen || $[31] !== onItemClick || $[32] !== tooltipsOpen) {
|
|
31289
|
+
t152 = (entry) => /* @__PURE__ */ jsxRuntime.jsx(DrawerNavigationItem, { icon: /* @__PURE__ */ jsxRuntime.jsx(IconForView, { collectionOrView: entry.collection ?? entry.view, size: 18 }), tooltipsOpen: !collapsed && tooltipsOpen, adminMenuOpen, drawerOpen, onClick: () => onItemClick?.(entry), url: entry.url, name: entry.name }, entry.id);
|
|
31290
|
+
$[28] = adminMenuOpen;
|
|
31291
|
+
$[29] = collapsed;
|
|
31292
|
+
$[30] = drawerOpen;
|
|
31293
|
+
$[31] = onItemClick;
|
|
31294
|
+
$[32] = tooltipsOpen;
|
|
31295
|
+
$[33] = t152;
|
|
30828
31296
|
} else {
|
|
30829
|
-
|
|
30830
|
-
}
|
|
30831
|
-
|
|
30832
|
-
$[
|
|
30833
|
-
$[
|
|
30834
|
-
$[
|
|
30835
|
-
$[
|
|
30836
|
-
$[
|
|
30837
|
-
$[
|
|
30838
|
-
$[
|
|
31297
|
+
t152 = $[33];
|
|
31298
|
+
}
|
|
31299
|
+
t14 = entries.map(t152);
|
|
31300
|
+
$[21] = adminMenuOpen;
|
|
31301
|
+
$[22] = collapsed;
|
|
31302
|
+
$[23] = drawerOpen;
|
|
31303
|
+
$[24] = entries;
|
|
31304
|
+
$[25] = onItemClick;
|
|
31305
|
+
$[26] = tooltipsOpen;
|
|
31306
|
+
$[27] = t14;
|
|
30839
31307
|
} else {
|
|
30840
|
-
|
|
31308
|
+
t14 = $[27];
|
|
30841
31309
|
}
|
|
30842
|
-
let
|
|
30843
|
-
if ($[
|
|
30844
|
-
|
|
30845
|
-
$[
|
|
30846
|
-
$[
|
|
30847
|
-
$[
|
|
31310
|
+
let t15;
|
|
31311
|
+
if ($[34] !== t13 || $[35] !== t14) {
|
|
31312
|
+
t15 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: t13, children: t14 });
|
|
31313
|
+
$[34] = t13;
|
|
31314
|
+
$[35] = t14;
|
|
31315
|
+
$[36] = t15;
|
|
30848
31316
|
} else {
|
|
30849
|
-
|
|
31317
|
+
t15 = $[36];
|
|
30850
31318
|
}
|
|
30851
|
-
let
|
|
30852
|
-
if ($[
|
|
30853
|
-
|
|
30854
|
-
|
|
30855
|
-
|
|
31319
|
+
let t16;
|
|
31320
|
+
if ($[37] !== t1 || $[38] !== t11 || $[39] !== t15) {
|
|
31321
|
+
t16 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "my-2 mx-2 flex flex-col", children: [
|
|
31322
|
+
t11,
|
|
31323
|
+
t15
|
|
30856
31324
|
] }, t1);
|
|
30857
|
-
$[
|
|
30858
|
-
$[
|
|
30859
|
-
$[
|
|
30860
|
-
$[
|
|
31325
|
+
$[37] = t1;
|
|
31326
|
+
$[38] = t11;
|
|
31327
|
+
$[39] = t15;
|
|
31328
|
+
$[40] = t16;
|
|
30861
31329
|
} else {
|
|
30862
|
-
|
|
31330
|
+
t16 = $[40];
|
|
30863
31331
|
}
|
|
30864
|
-
return
|
|
31332
|
+
return t16;
|
|
30865
31333
|
}
|
|
30866
31334
|
function _temp$a(e) {
|
|
30867
31335
|
return e.stopPropagation();
|
|
30868
31336
|
}
|
|
30869
31337
|
function DefaultDrawer(t0) {
|
|
30870
|
-
const $ = reactCompilerRuntime.c(
|
|
31338
|
+
const $ = reactCompilerRuntime.c(40);
|
|
30871
31339
|
const {
|
|
30872
31340
|
className,
|
|
30873
31341
|
style
|
|
@@ -30879,6 +31347,20 @@
|
|
|
30879
31347
|
logo
|
|
30880
31348
|
} = useApp();
|
|
30881
31349
|
const [adminMenuOpen, setAdminMenuOpen] = React.useState(false);
|
|
31350
|
+
const scrollRef = React.useRef(null);
|
|
31351
|
+
const [scrolled, setScrolled] = React.useState(false);
|
|
31352
|
+
let t1;
|
|
31353
|
+
if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
31354
|
+
t1 = () => {
|
|
31355
|
+
if (scrollRef.current) {
|
|
31356
|
+
setScrolled(scrollRef.current.scrollTop > 0);
|
|
31357
|
+
}
|
|
31358
|
+
};
|
|
31359
|
+
$[0] = t1;
|
|
31360
|
+
} else {
|
|
31361
|
+
t1 = $[0];
|
|
31362
|
+
}
|
|
31363
|
+
const handleScroll = t1;
|
|
30882
31364
|
const analyticsController = useAnalyticsController();
|
|
30883
31365
|
const navigation = useNavigationController();
|
|
30884
31366
|
const {
|
|
@@ -30895,22 +31377,23 @@
|
|
|
30895
31377
|
groups
|
|
30896
31378
|
} = navigation.topLevelNavigation;
|
|
30897
31379
|
const adminViews = navigationEntries.filter(_temp$9) ?? [];
|
|
30898
|
-
let
|
|
30899
|
-
if ($[
|
|
30900
|
-
|
|
30901
|
-
$[
|
|
30902
|
-
$[
|
|
31380
|
+
let t2;
|
|
31381
|
+
if ($[1] !== groups) {
|
|
31382
|
+
t2 = groups.filter(_temp2$3);
|
|
31383
|
+
$[1] = groups;
|
|
31384
|
+
$[2] = t2;
|
|
30903
31385
|
} else {
|
|
30904
|
-
|
|
31386
|
+
t2 = $[2];
|
|
30905
31387
|
}
|
|
30906
|
-
const groupsWithoutAdmin =
|
|
31388
|
+
const groupsWithoutAdmin = t2;
|
|
30907
31389
|
const {
|
|
30908
31390
|
isGroupCollapsed,
|
|
30909
31391
|
toggleGroupCollapsed
|
|
30910
31392
|
} = useCollapsedGroups(groupsWithoutAdmin, "drawer");
|
|
30911
|
-
|
|
30912
|
-
|
|
30913
|
-
|
|
31393
|
+
const drawerVisuallyOpen = drawerOpen || drawerHovered;
|
|
31394
|
+
let t3;
|
|
31395
|
+
if ($[3] !== analyticsController || $[4] !== closeDrawer || $[5] !== largeLayout) {
|
|
31396
|
+
t3 = (view) => {
|
|
30914
31397
|
const eventName = view.type === "collection" ? "drawer_navigate_to_collection" : view.type === "view" ? "drawer_navigate_to_view" : "unmapped_event";
|
|
30915
31398
|
analyticsController.onAnalyticsEvent?.(eventName, {
|
|
30916
31399
|
url: view.url
|
|
@@ -30919,106 +31402,119 @@
|
|
|
30919
31402
|
closeDrawer();
|
|
30920
31403
|
}
|
|
30921
31404
|
};
|
|
30922
|
-
$[
|
|
30923
|
-
$[
|
|
30924
|
-
$[
|
|
30925
|
-
$[
|
|
31405
|
+
$[3] = analyticsController;
|
|
31406
|
+
$[4] = closeDrawer;
|
|
31407
|
+
$[5] = largeLayout;
|
|
31408
|
+
$[6] = t3;
|
|
30926
31409
|
} else {
|
|
30927
|
-
|
|
31410
|
+
t3 = $[6];
|
|
30928
31411
|
}
|
|
30929
|
-
const onItemClick =
|
|
30930
|
-
|
|
30931
|
-
|
|
30932
|
-
|
|
30933
|
-
|
|
30934
|
-
|
|
31412
|
+
const onItemClick = t3;
|
|
31413
|
+
const t4 = "navigation";
|
|
31414
|
+
const t5 = "Main navigation";
|
|
31415
|
+
let t6;
|
|
31416
|
+
if ($[7] !== className) {
|
|
31417
|
+
t6 = ui.cls("flex flex-col h-full relative grow w-full", className);
|
|
31418
|
+
$[7] = className;
|
|
31419
|
+
$[8] = t6;
|
|
30935
31420
|
} else {
|
|
30936
|
-
|
|
31421
|
+
t6 = $[8];
|
|
30937
31422
|
}
|
|
30938
|
-
let
|
|
30939
|
-
if ($[
|
|
30940
|
-
|
|
30941
|
-
$[
|
|
30942
|
-
$[
|
|
31423
|
+
let t7;
|
|
31424
|
+
if ($[9] !== logo) {
|
|
31425
|
+
t7 = /* @__PURE__ */ jsxRuntime.jsx(DrawerLogo, { logo });
|
|
31426
|
+
$[9] = logo;
|
|
31427
|
+
$[10] = t7;
|
|
30943
31428
|
} else {
|
|
30944
|
-
|
|
31429
|
+
t7 = $[10];
|
|
30945
31430
|
}
|
|
30946
|
-
|
|
30947
|
-
|
|
30948
|
-
|
|
30949
|
-
|
|
31431
|
+
const t8 = scrolled ? "linear-gradient(to bottom, transparent 0, black 20px, black calc(100% - 20px), transparent 100%)" : "linear-gradient(to bottom, black 0, black calc(100% - 20px), transparent 100%)";
|
|
31432
|
+
let t9;
|
|
31433
|
+
if ($[11] !== t8) {
|
|
31434
|
+
t9 = {
|
|
31435
|
+
maskImage: t8
|
|
30950
31436
|
};
|
|
30951
|
-
$[
|
|
31437
|
+
$[11] = t8;
|
|
31438
|
+
$[12] = t9;
|
|
30952
31439
|
} else {
|
|
30953
|
-
|
|
31440
|
+
t9 = $[12];
|
|
30954
31441
|
}
|
|
30955
|
-
let
|
|
30956
|
-
if ($[
|
|
30957
|
-
let
|
|
30958
|
-
if ($[
|
|
30959
|
-
|
|
31442
|
+
let t10;
|
|
31443
|
+
if ($[13] !== adminMenuOpen || $[14] !== drawerVisuallyOpen || $[15] !== groupsWithoutAdmin || $[16] !== isGroupCollapsed || $[17] !== navigationEntries || $[18] !== onItemClick || $[19] !== toggleGroupCollapsed || $[20] !== tooltipsOpen) {
|
|
31444
|
+
let t112;
|
|
31445
|
+
if ($[22] !== adminMenuOpen || $[23] !== drawerVisuallyOpen || $[24] !== isGroupCollapsed || $[25] !== navigationEntries || $[26] !== onItemClick || $[27] !== toggleGroupCollapsed || $[28] !== tooltipsOpen) {
|
|
31446
|
+
t112 = (group) => {
|
|
30960
31447
|
const entriesInGroup = Object.values(navigationEntries).filter((e_0) => e_0.group === group);
|
|
30961
|
-
return /* @__PURE__ */ jsxRuntime.jsx(DrawerNavigationGroup, { group, entries: entriesInGroup, collapsed: isGroupCollapsed(group), onToggleCollapsed: () => toggleGroupCollapsed(group), drawerOpen, tooltipsOpen, adminMenuOpen, onItemClick }, `drawer_group_${group}`);
|
|
31448
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DrawerNavigationGroup, { group, entries: entriesInGroup, collapsed: isGroupCollapsed(group), onToggleCollapsed: () => toggleGroupCollapsed(group), drawerOpen: drawerVisuallyOpen, tooltipsOpen, adminMenuOpen, onItemClick }, `drawer_group_${group}`);
|
|
30962
31449
|
};
|
|
30963
|
-
$[
|
|
30964
|
-
$[
|
|
30965
|
-
$[
|
|
30966
|
-
$[
|
|
30967
|
-
$[
|
|
30968
|
-
$[
|
|
30969
|
-
$[
|
|
30970
|
-
$[
|
|
31450
|
+
$[22] = adminMenuOpen;
|
|
31451
|
+
$[23] = drawerVisuallyOpen;
|
|
31452
|
+
$[24] = isGroupCollapsed;
|
|
31453
|
+
$[25] = navigationEntries;
|
|
31454
|
+
$[26] = onItemClick;
|
|
31455
|
+
$[27] = toggleGroupCollapsed;
|
|
31456
|
+
$[28] = tooltipsOpen;
|
|
31457
|
+
$[29] = t112;
|
|
30971
31458
|
} else {
|
|
30972
|
-
|
|
30973
|
-
}
|
|
30974
|
-
|
|
30975
|
-
$[
|
|
30976
|
-
$[
|
|
30977
|
-
$[
|
|
30978
|
-
$[
|
|
30979
|
-
$[
|
|
30980
|
-
$[
|
|
30981
|
-
$[
|
|
30982
|
-
$[
|
|
30983
|
-
$[
|
|
31459
|
+
t112 = $[29];
|
|
31460
|
+
}
|
|
31461
|
+
t10 = groupsWithoutAdmin.map(t112);
|
|
31462
|
+
$[13] = adminMenuOpen;
|
|
31463
|
+
$[14] = drawerVisuallyOpen;
|
|
31464
|
+
$[15] = groupsWithoutAdmin;
|
|
31465
|
+
$[16] = isGroupCollapsed;
|
|
31466
|
+
$[17] = navigationEntries;
|
|
31467
|
+
$[18] = onItemClick;
|
|
31468
|
+
$[19] = toggleGroupCollapsed;
|
|
31469
|
+
$[20] = tooltipsOpen;
|
|
31470
|
+
$[21] = t10;
|
|
30984
31471
|
} else {
|
|
30985
|
-
|
|
31472
|
+
t10 = $[21];
|
|
30986
31473
|
}
|
|
30987
|
-
let
|
|
30988
|
-
if ($[
|
|
30989
|
-
|
|
30990
|
-
$[
|
|
30991
|
-
$[
|
|
31474
|
+
let t11;
|
|
31475
|
+
if ($[30] !== t10 || $[31] !== t9) {
|
|
31476
|
+
t11 = /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, onScroll: handleScroll, className: "flex-grow min-h-0 overflow-y-auto overflow-x-hidden no-scrollbar px-2", style: t9, children: t10 });
|
|
31477
|
+
$[30] = t10;
|
|
31478
|
+
$[31] = t9;
|
|
31479
|
+
$[32] = t11;
|
|
30992
31480
|
} else {
|
|
30993
|
-
|
|
31481
|
+
t11 = $[32];
|
|
30994
31482
|
}
|
|
30995
|
-
const
|
|
30996
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Tooltip, { title: "Admin", open: tooltipsOpen, side: "right", sideOffset: 28, children: /* @__PURE__ */ jsxRuntime.jsx(ui.MoreVertIcon, {}) }),
|
|
30997
|
-
|
|
31483
|
+
const t12 = adminViews.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 px-4", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Menu, { side: "right", open: adminMenuOpen, onOpenChange: setAdminMenuOpen, trigger: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cls("flex flex-row items-center rounded-lg cursor-pointer w-full", "hover:bg-surface-accent-100 dark:hover:bg-surface-800 transition-colors duration-150 h-[30px]"), children: [
|
|
31484
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 flex items-center justify-center w-[44px] h-[30px] text-surface-500 dark:text-surface-400", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Tooltip, { title: "Admin", open: drawerVisuallyOpen || adminMenuOpen ? false : tooltipsOpen, side: "right", sideOffset: 28, children: /* @__PURE__ */ jsxRuntime.jsx(ui.MoreVertIcon, { size: "small" }) }) }),
|
|
31485
|
+
drawerVisuallyOpen && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cls("font-semibold text-[11px] uppercase tracking-wider text-surface-400"), children: t("admin") })
|
|
30998
31486
|
] }), children: adminViews.map((entry) => /* @__PURE__ */ jsxRuntime.jsxs(ui.MenuItem, { onClick: (event) => {
|
|
30999
31487
|
event.preventDefault();
|
|
31000
31488
|
navigate(entry.url);
|
|
31001
31489
|
}, children: [
|
|
31002
31490
|
/* @__PURE__ */ jsxRuntime.jsx(IconForView, { collectionOrView: entry.view }),
|
|
31003
31491
|
t(entry.name)
|
|
31004
|
-
] }, entry.id)) });
|
|
31005
|
-
let
|
|
31006
|
-
if ($[
|
|
31007
|
-
|
|
31008
|
-
|
|
31492
|
+
] }, entry.id)) }) });
|
|
31493
|
+
let t13;
|
|
31494
|
+
if ($[33] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
31495
|
+
t13 = /* @__PURE__ */ jsxRuntime.jsx(DrawerToggle, {});
|
|
31496
|
+
$[33] = t13;
|
|
31497
|
+
} else {
|
|
31498
|
+
t13 = $[33];
|
|
31499
|
+
}
|
|
31500
|
+
let t14;
|
|
31501
|
+
if ($[34] !== style || $[35] !== t11 || $[36] !== t12 || $[37] !== t6 || $[38] !== t7) {
|
|
31502
|
+
t14 = /* @__PURE__ */ jsxRuntime.jsxs("div", { role: t4, "aria-label": t5, className: t6, style, children: [
|
|
31009
31503
|
t7,
|
|
31010
|
-
|
|
31011
|
-
|
|
31012
|
-
|
|
31013
|
-
|
|
31014
|
-
$[
|
|
31015
|
-
$[
|
|
31016
|
-
$[
|
|
31017
|
-
$[
|
|
31504
|
+
t11,
|
|
31505
|
+
t12,
|
|
31506
|
+
t13
|
|
31507
|
+
] });
|
|
31508
|
+
$[34] = style;
|
|
31509
|
+
$[35] = t11;
|
|
31510
|
+
$[36] = t12;
|
|
31511
|
+
$[37] = t6;
|
|
31512
|
+
$[38] = t7;
|
|
31513
|
+
$[39] = t14;
|
|
31018
31514
|
} else {
|
|
31019
|
-
|
|
31515
|
+
t14 = $[39];
|
|
31020
31516
|
}
|
|
31021
|
-
return
|
|
31517
|
+
return t14;
|
|
31022
31518
|
}
|
|
31023
31519
|
function _temp2$3(g) {
|
|
31024
31520
|
return g !== "Admin";
|
|
@@ -31026,62 +31522,133 @@
|
|
|
31026
31522
|
function _temp$9(e) {
|
|
31027
31523
|
return e.type === "admin";
|
|
31028
31524
|
}
|
|
31029
|
-
function
|
|
31030
|
-
const $ = reactCompilerRuntime.c(
|
|
31031
|
-
const {
|
|
31032
|
-
logo
|
|
31033
|
-
} = t0;
|
|
31034
|
-
const navigation = useNavigationController();
|
|
31525
|
+
function DrawerToggle() {
|
|
31526
|
+
const $ = reactCompilerRuntime.c(26);
|
|
31035
31527
|
const {
|
|
31036
|
-
drawerOpen
|
|
31528
|
+
drawerOpen,
|
|
31529
|
+
drawerHovered,
|
|
31530
|
+
openDrawer,
|
|
31531
|
+
closeDrawer
|
|
31037
31532
|
} = useApp();
|
|
31038
|
-
const
|
|
31533
|
+
const isExpanded = drawerOpen;
|
|
31534
|
+
const isHovered = drawerHovered && !drawerOpen;
|
|
31535
|
+
const showFullContent = isExpanded || isHovered;
|
|
31536
|
+
const t0 = isExpanded ? "Collapse" : "Expand";
|
|
31537
|
+
const t1 = isHovered ? false : void 0;
|
|
31039
31538
|
let t2;
|
|
31040
|
-
if ($[0]
|
|
31041
|
-
t2 =
|
|
31042
|
-
|
|
31043
|
-
|
|
31539
|
+
if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
31540
|
+
t2 = ui.cls("flex flex-row items-center rounded-lg cursor-pointer", "hover:bg-surface-accent-100 dark:hover:bg-surface-800", "transition-colors duration-150 h-[30px]");
|
|
31541
|
+
$[0] = t2;
|
|
31542
|
+
} else {
|
|
31543
|
+
t2 = $[0];
|
|
31544
|
+
}
|
|
31545
|
+
const t3 = isExpanded ? "Collapse" : "Expand";
|
|
31546
|
+
let t4;
|
|
31547
|
+
let t5;
|
|
31548
|
+
if ($[1] !== closeDrawer || $[2] !== isExpanded || $[3] !== openDrawer) {
|
|
31549
|
+
t4 = () => isExpanded ? closeDrawer() : openDrawer();
|
|
31550
|
+
t5 = (e) => {
|
|
31551
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
31552
|
+
e.preventDefault();
|
|
31553
|
+
isExpanded ? closeDrawer() : openDrawer();
|
|
31554
|
+
}
|
|
31044
31555
|
};
|
|
31045
|
-
$[
|
|
31046
|
-
$[
|
|
31556
|
+
$[1] = closeDrawer;
|
|
31557
|
+
$[2] = isExpanded;
|
|
31558
|
+
$[3] = openDrawer;
|
|
31559
|
+
$[4] = t4;
|
|
31560
|
+
$[5] = t5;
|
|
31047
31561
|
} else {
|
|
31048
|
-
|
|
31562
|
+
t4 = $[4];
|
|
31563
|
+
t5 = $[5];
|
|
31049
31564
|
}
|
|
31050
|
-
let
|
|
31051
|
-
if ($[
|
|
31052
|
-
|
|
31053
|
-
$[
|
|
31565
|
+
let t6;
|
|
31566
|
+
if ($[6] !== isExpanded) {
|
|
31567
|
+
t6 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 flex items-center justify-center w-[44px] h-[30px] text-surface-500 dark:text-surface-400", children: isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(ui.KeyboardDoubleArrowLeftIcon, { size: "small" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.KeyboardDoubleArrowRightIcon, { size: "small" }) });
|
|
31568
|
+
$[6] = isExpanded;
|
|
31569
|
+
$[7] = t6;
|
|
31054
31570
|
} else {
|
|
31055
|
-
|
|
31571
|
+
t6 = $[7];
|
|
31056
31572
|
}
|
|
31057
|
-
|
|
31058
|
-
|
|
31059
|
-
|
|
31060
|
-
|
|
31061
|
-
$[
|
|
31062
|
-
$[
|
|
31573
|
+
const t7 = showFullContent ? "opacity-100 w-auto" : "opacity-0 w-0";
|
|
31574
|
+
let t8;
|
|
31575
|
+
if ($[8] !== t7) {
|
|
31576
|
+
t8 = ui.cls("overflow-hidden transition-all duration-200 ease-in-out", t7);
|
|
31577
|
+
$[8] = t7;
|
|
31578
|
+
$[9] = t8;
|
|
31063
31579
|
} else {
|
|
31064
|
-
|
|
31580
|
+
t8 = $[9];
|
|
31065
31581
|
}
|
|
31066
|
-
|
|
31067
|
-
|
|
31068
|
-
|
|
31069
|
-
|
|
31070
|
-
$[
|
|
31071
|
-
$[
|
|
31582
|
+
const t9 = isExpanded ? "Collapse" : "Expand";
|
|
31583
|
+
let t10;
|
|
31584
|
+
if ($[10] !== t9) {
|
|
31585
|
+
t10 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { variant: "body2", className: "text-surface-500 dark:text-surface-400 select-none whitespace-nowrap", children: t9 });
|
|
31586
|
+
$[10] = t9;
|
|
31587
|
+
$[11] = t10;
|
|
31072
31588
|
} else {
|
|
31073
|
-
|
|
31589
|
+
t10 = $[11];
|
|
31074
31590
|
}
|
|
31075
|
-
let
|
|
31076
|
-
if ($[
|
|
31077
|
-
|
|
31078
|
-
$[
|
|
31079
|
-
$[
|
|
31080
|
-
$[
|
|
31591
|
+
let t11;
|
|
31592
|
+
if ($[12] !== t10 || $[13] !== t8) {
|
|
31593
|
+
t11 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: t8, children: t10 });
|
|
31594
|
+
$[12] = t10;
|
|
31595
|
+
$[13] = t8;
|
|
31596
|
+
$[14] = t11;
|
|
31081
31597
|
} else {
|
|
31082
|
-
|
|
31598
|
+
t11 = $[14];
|
|
31083
31599
|
}
|
|
31084
|
-
|
|
31600
|
+
let t12;
|
|
31601
|
+
if ($[15] !== isExpanded || $[16] !== t11 || $[17] !== t3 || $[18] !== t4 || $[19] !== t5 || $[20] !== t6) {
|
|
31602
|
+
t12 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: t2, role: "button", tabIndex: 0, "aria-expanded": isExpanded, "aria-label": t3, onClick: t4, onKeyDown: t5, children: [
|
|
31603
|
+
t6,
|
|
31604
|
+
t11
|
|
31605
|
+
] });
|
|
31606
|
+
$[15] = isExpanded;
|
|
31607
|
+
$[16] = t11;
|
|
31608
|
+
$[17] = t3;
|
|
31609
|
+
$[18] = t4;
|
|
31610
|
+
$[19] = t5;
|
|
31611
|
+
$[20] = t6;
|
|
31612
|
+
$[21] = t12;
|
|
31613
|
+
} else {
|
|
31614
|
+
t12 = $[21];
|
|
31615
|
+
}
|
|
31616
|
+
let t13;
|
|
31617
|
+
if ($[22] !== t0 || $[23] !== t1 || $[24] !== t12) {
|
|
31618
|
+
t13 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 mt-auto px-4 pt-0.5 pb-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Tooltip, { title: t0, side: "right", sideOffset: 12, open: t1, children: t12 }) });
|
|
31619
|
+
$[22] = t0;
|
|
31620
|
+
$[23] = t1;
|
|
31621
|
+
$[24] = t12;
|
|
31622
|
+
$[25] = t13;
|
|
31623
|
+
} else {
|
|
31624
|
+
t13 = $[25];
|
|
31625
|
+
}
|
|
31626
|
+
return t13;
|
|
31627
|
+
}
|
|
31628
|
+
function DrawerLogo(t0) {
|
|
31629
|
+
const $ = reactCompilerRuntime.c(5);
|
|
31630
|
+
const {
|
|
31631
|
+
logo
|
|
31632
|
+
} = t0;
|
|
31633
|
+
const navigation = useNavigationController();
|
|
31634
|
+
let t1;
|
|
31635
|
+
if ($[0] !== logo) {
|
|
31636
|
+
t1 = logo ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo, alt: "Logo", className: "w-[28px] h-[28px] object-contain" }) : /* @__PURE__ */ jsxRuntime.jsx(FireCMSLogo, { width: "28px", height: "28px" });
|
|
31637
|
+
$[0] = logo;
|
|
31638
|
+
$[1] = t1;
|
|
31639
|
+
} else {
|
|
31640
|
+
t1 = $[1];
|
|
31641
|
+
}
|
|
31642
|
+
let t2;
|
|
31643
|
+
if ($[2] !== navigation.basePath || $[3] !== t1) {
|
|
31644
|
+
t2 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-row items-center shrink-0 pt-4 pb-0 px-2", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Tooltip, { title: "Home", sideOffset: 20, side: "right", children: /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Link, { className: "shrink-0 flex items-center justify-center w-[56px] h-[40px]", to: navigation.basePath, children: t1 }) }) });
|
|
31645
|
+
$[2] = navigation.basePath;
|
|
31646
|
+
$[3] = t1;
|
|
31647
|
+
$[4] = t2;
|
|
31648
|
+
} else {
|
|
31649
|
+
t2 = $[4];
|
|
31650
|
+
}
|
|
31651
|
+
return t2;
|
|
31085
31652
|
}
|
|
31086
31653
|
function UserSelectFieldBinding(t0) {
|
|
31087
31654
|
const $ = reactCompilerRuntime.c(44);
|
|
@@ -31472,6 +32039,17 @@
|
|
|
31472
32039
|
Field: DateTimeFieldBinding
|
|
31473
32040
|
}
|
|
31474
32041
|
},
|
|
32042
|
+
geopoint: {
|
|
32043
|
+
key: "geopoint",
|
|
32044
|
+
name: "Geopoint",
|
|
32045
|
+
description: "Latitude and longitude pair",
|
|
32046
|
+
Icon: ui.LocationOnIcon,
|
|
32047
|
+
color: "#0ea5e9",
|
|
32048
|
+
property: {
|
|
32049
|
+
dataType: "geopoint",
|
|
32050
|
+
Field: GeopointFieldBinding
|
|
32051
|
+
}
|
|
32052
|
+
},
|
|
31475
32053
|
group: {
|
|
31476
32054
|
key: "group",
|
|
31477
32055
|
name: "Group",
|
|
@@ -31614,6 +32192,8 @@
|
|
|
31614
32192
|
return "switch";
|
|
31615
32193
|
} else if (property.dataType === "date") {
|
|
31616
32194
|
return "date_time";
|
|
32195
|
+
} else if (property.dataType === "geopoint") {
|
|
32196
|
+
return "geopoint";
|
|
31617
32197
|
} else if (property.dataType === "reference") {
|
|
31618
32198
|
return "reference";
|
|
31619
32199
|
}
|
|
@@ -31624,6 +32204,20 @@
|
|
|
31624
32204
|
if (property.propertyConfig) return property.propertyConfig;
|
|
31625
32205
|
return getDefaultFieldId(property);
|
|
31626
32206
|
}
|
|
32207
|
+
const SIDE_PANEL_HASHES = ["#side", "#new_side"];
|
|
32208
|
+
function shouldBlockEntityNavigation(params) {
|
|
32209
|
+
const {
|
|
32210
|
+
currentLocation,
|
|
32211
|
+
nextLocation,
|
|
32212
|
+
entityPath,
|
|
32213
|
+
basePath,
|
|
32214
|
+
blocked
|
|
32215
|
+
} = params;
|
|
32216
|
+
if (nextLocation.pathname.startsWith(entityPath)) return false;
|
|
32217
|
+
if (SIDE_PANEL_HASHES.includes(nextLocation.hash)) return false;
|
|
32218
|
+
if (SIDE_PANEL_HASHES.includes(currentLocation.hash) && nextLocation.pathname === basePath) return false;
|
|
32219
|
+
return blocked;
|
|
32220
|
+
}
|
|
31627
32221
|
const EntityEditView = lazyEager(() => Promise.resolve().then(() => EntityEditView$2), "EntityEditView");
|
|
31628
32222
|
const EntityCollectionView = lazyEager(() => Promise.resolve().then(() => EntityCollectionView$2), "EntityCollectionView");
|
|
31629
32223
|
function FireCMSRoute() {
|
|
@@ -32002,19 +32596,31 @@
|
|
|
32002
32596
|
setSelectedTab(urlTab);
|
|
32003
32597
|
}
|
|
32004
32598
|
}, [urlTab]);
|
|
32005
|
-
const
|
|
32006
|
-
const
|
|
32599
|
+
const lastCollectionEntry = navigationEntries.findLast((entry_1) => entry_1.type === "collection");
|
|
32600
|
+
const entityEntryIndex = lastEntityEntry ? navigationEntries.indexOf(lastEntityEntry) : -1;
|
|
32601
|
+
const parentCollectionEntry = entityEntryIndex > 0 ? navigationEntries[entityEntryIndex - 1] : void 0;
|
|
32602
|
+
const buildUrl = (escapedPath) => addInitialSlash(navigation.buildUrlCollectionPath(escapedPath));
|
|
32603
|
+
const basePath = !entityId || isNew || !parentCollectionEntry ? pathname : buildUrl(parentCollectionEntry.fullPath);
|
|
32604
|
+
const entityPath = lastEntityEntry ? buildUrl(lastEntityEntry.fullPath) : basePath;
|
|
32605
|
+
const buildEntityUrl = (id, tab) => {
|
|
32606
|
+
const parentPath = parentCollectionEntry?.fullPath ?? lastCollectionEntry?.fullPath;
|
|
32607
|
+
if (!parentPath) return pathname;
|
|
32608
|
+
return buildUrl(`${parentPath}/${encodeEntityId(id)}${tab ? "/" + tab : ""}`);
|
|
32609
|
+
};
|
|
32007
32610
|
let blocker = void 0;
|
|
32008
32611
|
try {
|
|
32009
32612
|
blocker = reactRouter.useBlocker(({
|
|
32613
|
+
currentLocation,
|
|
32010
32614
|
nextLocation
|
|
32011
|
-
}) => {
|
|
32012
|
-
|
|
32013
|
-
|
|
32014
|
-
|
|
32615
|
+
}) => shouldBlockEntityNavigation({
|
|
32616
|
+
currentLocation,
|
|
32617
|
+
nextLocation,
|
|
32618
|
+
entityPath,
|
|
32619
|
+
basePath,
|
|
32620
|
+
blocked: blocked.current
|
|
32621
|
+
}));
|
|
32015
32622
|
} catch (e) {
|
|
32016
32623
|
}
|
|
32017
|
-
const lastCollectionEntry = navigationEntries.findLast((entry_1) => entry_1.type === "collection");
|
|
32018
32624
|
if (isNew && !lastCollectionEntry) {
|
|
32019
32625
|
throw new Error("INTERNAL: No collection found in the navigation");
|
|
32020
32626
|
}
|
|
@@ -32022,36 +32628,23 @@
|
|
|
32022
32628
|
return /* @__PURE__ */ jsxRuntime.jsx(NotFoundPage, {});
|
|
32023
32629
|
}
|
|
32024
32630
|
const collection = isNew ? lastCollectionEntry.collection : lastEntityEntry.parentCollection;
|
|
32025
|
-
const fullIdPath = isNew ? lastCollectionEntry.
|
|
32026
|
-
const collectionPath = navigation.resolveIdsFrom(
|
|
32631
|
+
const fullIdPath = isNew ? lastCollectionEntry.fullPath : parentCollectionEntry?.fullPath ?? lastEntityEntry.fullPath;
|
|
32632
|
+
const collectionPath = navigation.resolveIdsFrom(isNew ? lastCollectionEntry.path : lastEntityEntry.path);
|
|
32027
32633
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
32028
32634
|
/* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(EntityEditView, { entityId: isNew ? void 0 : entityId, fullIdPath, collection, layout: "full_screen", path: collectionPath, copy: isCopy, selectedTab: selectedTab ?? void 0, onValuesModified: (modified) => blocked.current = modified, onSaved: (params) => {
|
|
32029
|
-
const newSelectedTab = params.selectedTab;
|
|
32030
32635
|
const newEntityId = params.entityId;
|
|
32031
|
-
if (
|
|
32032
|
-
|
|
32033
|
-
|
|
32034
|
-
|
|
32035
|
-
} else {
|
|
32036
|
-
navigate(`${basePath}/${newEntityId}`, {
|
|
32037
|
-
replace: true
|
|
32038
|
-
});
|
|
32039
|
-
}
|
|
32636
|
+
if (!newEntityId) return;
|
|
32637
|
+
navigate(buildEntityUrl(newEntityId, params.selectedTab), {
|
|
32638
|
+
replace: true
|
|
32639
|
+
});
|
|
32040
32640
|
}, onTabChange: (params_0) => {
|
|
32041
32641
|
setSelectedTab(params_0.selectedTab);
|
|
32042
|
-
if (isNew) {
|
|
32642
|
+
if (isNew || !entityId) {
|
|
32043
32643
|
return;
|
|
32044
32644
|
}
|
|
32045
|
-
|
|
32046
|
-
|
|
32047
|
-
|
|
32048
|
-
replace: true
|
|
32049
|
-
});
|
|
32050
|
-
} else {
|
|
32051
|
-
navigate(`${basePath}/${entityId}`, {
|
|
32052
|
-
replace: true
|
|
32053
|
-
});
|
|
32054
|
-
}
|
|
32645
|
+
navigate(buildEntityUrl(entityId, params_0.selectedTab), {
|
|
32646
|
+
replace: true
|
|
32647
|
+
});
|
|
32055
32648
|
}, parentCollectionIds }, collection.id + "_" + (isNew ? "new" : isCopy ? entityId + "_copy" : entityId)) }),
|
|
32056
32649
|
/* @__PURE__ */ jsxRuntime.jsx(UnsavedChangesDialog, { open: blocker?.state === "blocked", handleOk: () => blocker?.proceed?.(), handleCancel: () => blocker?.reset?.(), body: "You have unsaved changes in this entity." })
|
|
32057
32650
|
] });
|
|
@@ -32309,7 +32902,12 @@
|
|
|
32309
32902
|
const setOnHoverTrue = t4;
|
|
32310
32903
|
let t5;
|
|
32311
32904
|
if ($[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
32312
|
-
t5 = () =>
|
|
32905
|
+
t5 = () => {
|
|
32906
|
+
if (typeof document !== "undefined" && document.querySelector("[data-radix-popper-content-wrapper]")) {
|
|
32907
|
+
return;
|
|
32908
|
+
}
|
|
32909
|
+
setOnHover(false);
|
|
32910
|
+
};
|
|
32313
32911
|
$[7] = t5;
|
|
32314
32912
|
} else {
|
|
32315
32913
|
t5 = $[7];
|
|
@@ -32343,24 +32941,26 @@
|
|
|
32343
32941
|
t7 = $[9];
|
|
32344
32942
|
}
|
|
32345
32943
|
const handleDrawerClose = t7;
|
|
32346
|
-
const computedDrawerOpen = drawerOpen
|
|
32944
|
+
const computedDrawerOpen = drawerOpen;
|
|
32945
|
+
const computedDrawerHovered = Boolean(largeLayout && onHover);
|
|
32347
32946
|
const hasAppBar = Boolean(appBarChildren.length > 0);
|
|
32348
32947
|
let t8;
|
|
32349
|
-
if ($[10] !== autoOpenDrawer || $[11] !==
|
|
32948
|
+
if ($[10] !== autoOpenDrawer || $[11] !== computedDrawerHovered || $[12] !== computedDrawerOpen || $[13] !== includeDrawer || $[14] !== logo) {
|
|
32350
32949
|
t8 = {
|
|
32351
32950
|
logo,
|
|
32352
32951
|
hasDrawer: includeDrawer,
|
|
32353
|
-
drawerHovered:
|
|
32952
|
+
drawerHovered: computedDrawerHovered,
|
|
32354
32953
|
drawerOpen: computedDrawerOpen,
|
|
32355
32954
|
closeDrawer: handleDrawerClose,
|
|
32356
32955
|
openDrawer: handleDrawerOpen,
|
|
32956
|
+
closeHover: setOnHoverFalse,
|
|
32357
32957
|
autoOpenDrawer
|
|
32358
32958
|
};
|
|
32359
32959
|
$[10] = autoOpenDrawer;
|
|
32360
|
-
$[11] =
|
|
32361
|
-
$[12] =
|
|
32362
|
-
$[13] =
|
|
32363
|
-
$[14] =
|
|
32960
|
+
$[11] = computedDrawerHovered;
|
|
32961
|
+
$[12] = computedDrawerOpen;
|
|
32962
|
+
$[13] = includeDrawer;
|
|
32963
|
+
$[14] = logo;
|
|
32364
32964
|
$[15] = t8;
|
|
32365
32965
|
} else {
|
|
32366
32966
|
t8 = $[15];
|
|
@@ -32390,11 +32990,11 @@
|
|
|
32390
32990
|
}
|
|
32391
32991
|
const t11 = includeDrawer && drawerChildren;
|
|
32392
32992
|
let t12;
|
|
32393
|
-
if ($[20] !==
|
|
32394
|
-
t12 = /* @__PURE__ */ jsxRuntime.jsx(DrawerWrapper, { displayed: includeDrawer, onMouseEnter: setOnHoverTrue, onMouseMove: setOnHoverTrue, onMouseLeave: setOnHoverFalse, open: computedDrawerOpen, hovered:
|
|
32395
|
-
$[20] =
|
|
32396
|
-
$[21] =
|
|
32397
|
-
$[22] =
|
|
32993
|
+
if ($[20] !== computedDrawerHovered || $[21] !== computedDrawerOpen || $[22] !== includeDrawer || $[23] !== t11) {
|
|
32994
|
+
t12 = /* @__PURE__ */ jsxRuntime.jsx(DrawerWrapper, { displayed: includeDrawer, onMouseEnter: setOnHoverTrue, onMouseMove: setOnHoverTrue, onMouseLeave: setOnHoverFalse, open: computedDrawerOpen, hovered: computedDrawerHovered, setDrawerOpen, children: t11 });
|
|
32995
|
+
$[20] = computedDrawerHovered;
|
|
32996
|
+
$[21] = computedDrawerOpen;
|
|
32997
|
+
$[22] = includeDrawer;
|
|
32398
32998
|
$[23] = t11;
|
|
32399
32999
|
$[24] = t12;
|
|
32400
33000
|
} else {
|
|
@@ -32492,193 +33092,149 @@
|
|
|
32492
33092
|
return t0;
|
|
32493
33093
|
};
|
|
32494
33094
|
function DrawerWrapper(props) {
|
|
32495
|
-
const $ = reactCompilerRuntime.c(
|
|
33095
|
+
const $ = reactCompilerRuntime.c(36);
|
|
32496
33096
|
const {
|
|
32497
33097
|
t
|
|
32498
33098
|
} = useTranslation();
|
|
32499
|
-
const
|
|
32500
|
-
|
|
32501
|
-
|
|
32502
|
-
|
|
32503
|
-
|
|
32504
|
-
|
|
32505
|
-
|
|
32506
|
-
$[0] =
|
|
32507
|
-
$[1] =
|
|
33099
|
+
const layoutWidth = !props.displayed ? 0 : props.open ? DRAWER_WIDTH : 72;
|
|
33100
|
+
const visualWidth = !props.displayed ? 0 : props.open || props.hovered ? DRAWER_WIDTH : 72;
|
|
33101
|
+
const isFloating = props.hovered && !props.open;
|
|
33102
|
+
const t0 = isFloating ? "absolute top-0 left-0 bottom-0 z-30 bg-surface-50 dark:bg-surface-900 shadow-lg border-r" : "relative bg-surface-50 dark:bg-surface-900";
|
|
33103
|
+
let t1;
|
|
33104
|
+
if ($[0] !== t0) {
|
|
33105
|
+
t1 = ui.cls("h-full overflow-hidden", ui.defaultBorderMixin, t0);
|
|
33106
|
+
$[0] = t0;
|
|
33107
|
+
$[1] = t1;
|
|
32508
33108
|
} else {
|
|
32509
|
-
|
|
33109
|
+
t1 = $[1];
|
|
32510
33110
|
}
|
|
32511
|
-
let
|
|
32512
|
-
if ($[2] !==
|
|
32513
|
-
|
|
32514
|
-
|
|
32515
|
-
|
|
32516
|
-
|
|
33111
|
+
let t2;
|
|
33112
|
+
if ($[2] !== visualWidth) {
|
|
33113
|
+
t2 = {
|
|
33114
|
+
width: visualWidth,
|
|
33115
|
+
transition: "left 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, opacity 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, width 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms"
|
|
33116
|
+
};
|
|
33117
|
+
$[2] = visualWidth;
|
|
33118
|
+
$[3] = t2;
|
|
32517
33119
|
} else {
|
|
32518
|
-
|
|
33120
|
+
t2 = $[3];
|
|
32519
33121
|
}
|
|
32520
|
-
const t2 = `z-20 absolute right-0 top-4 ${props.open ? "opacity-100" : "opacity-0 invisible"} transition-opacity duration-200 ease-in-out`;
|
|
32521
33122
|
let t3;
|
|
32522
|
-
if ($[
|
|
32523
|
-
t3 =
|
|
32524
|
-
$[
|
|
32525
|
-
$[
|
|
33123
|
+
if ($[4] !== props.children) {
|
|
33124
|
+
t3 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col h-full", children: props.children });
|
|
33125
|
+
$[4] = props.children;
|
|
33126
|
+
$[5] = t3;
|
|
32526
33127
|
} else {
|
|
32527
|
-
t3 = $[
|
|
33128
|
+
t3 = $[5];
|
|
32528
33129
|
}
|
|
32529
33130
|
let t4;
|
|
32530
|
-
if ($[7] !==
|
|
32531
|
-
t4 =
|
|
32532
|
-
$[
|
|
32533
|
-
$[
|
|
32534
|
-
|
|
32535
|
-
|
|
32536
|
-
}
|
|
32537
|
-
let t5;
|
|
32538
|
-
if ($[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
32539
|
-
t5 = /* @__PURE__ */ jsxRuntime.jsx(ui.ChevronLeftIcon, {});
|
|
32540
|
-
$[9] = t5;
|
|
32541
|
-
} else {
|
|
32542
|
-
t5 = $[9];
|
|
32543
|
-
}
|
|
32544
|
-
let t6;
|
|
32545
|
-
if ($[10] !== t3 || $[11] !== t4) {
|
|
32546
|
-
t6 = /* @__PURE__ */ jsxRuntime.jsx(ui.IconButton, { "aria-label": t3, onClick: t4, children: t5 });
|
|
32547
|
-
$[10] = t3;
|
|
32548
|
-
$[11] = t4;
|
|
32549
|
-
$[12] = t6;
|
|
32550
|
-
} else {
|
|
32551
|
-
t6 = $[12];
|
|
32552
|
-
}
|
|
32553
|
-
let t7;
|
|
32554
|
-
if ($[13] !== t2 || $[14] !== t6) {
|
|
32555
|
-
t7 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: t2, children: t6 });
|
|
32556
|
-
$[13] = t2;
|
|
32557
|
-
$[14] = t6;
|
|
32558
|
-
$[15] = t7;
|
|
32559
|
-
} else {
|
|
32560
|
-
t7 = $[15];
|
|
32561
|
-
}
|
|
32562
|
-
let t8;
|
|
32563
|
-
if ($[16] !== props.children) {
|
|
32564
|
-
t8 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col h-full", children: props.children });
|
|
32565
|
-
$[16] = props.children;
|
|
32566
|
-
$[17] = t8;
|
|
32567
|
-
} else {
|
|
32568
|
-
t8 = $[17];
|
|
32569
|
-
}
|
|
32570
|
-
let t9;
|
|
32571
|
-
if ($[18] !== t0 || $[19] !== t1 || $[20] !== t7 || $[21] !== t8) {
|
|
32572
|
-
t9 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative h-full no-scrollbar overflow-y-auto overflow-x-hidden", style: t0, children: [
|
|
32573
|
-
t1,
|
|
32574
|
-
t7,
|
|
32575
|
-
t8
|
|
32576
|
-
] });
|
|
32577
|
-
$[18] = t0;
|
|
32578
|
-
$[19] = t1;
|
|
32579
|
-
$[20] = t7;
|
|
32580
|
-
$[21] = t8;
|
|
32581
|
-
$[22] = t9;
|
|
33131
|
+
if ($[6] !== t1 || $[7] !== t2 || $[8] !== t3) {
|
|
33132
|
+
t4 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: t1, style: t2, children: t3 });
|
|
33133
|
+
$[6] = t1;
|
|
33134
|
+
$[7] = t2;
|
|
33135
|
+
$[8] = t3;
|
|
33136
|
+
$[9] = t4;
|
|
32582
33137
|
} else {
|
|
32583
|
-
|
|
33138
|
+
t4 = $[9];
|
|
32584
33139
|
}
|
|
32585
|
-
const innerDrawer =
|
|
33140
|
+
const innerDrawer = t4;
|
|
32586
33141
|
const largeLayout = useLargeLayout();
|
|
32587
33142
|
if (!largeLayout) {
|
|
32588
33143
|
if (!props.displayed) {
|
|
32589
33144
|
return null;
|
|
32590
33145
|
}
|
|
32591
|
-
let
|
|
32592
|
-
if ($[
|
|
32593
|
-
|
|
32594
|
-
$[
|
|
32595
|
-
$[
|
|
33146
|
+
let t52;
|
|
33147
|
+
if ($[10] !== t) {
|
|
33148
|
+
t52 = t("open_menu");
|
|
33149
|
+
$[10] = t;
|
|
33150
|
+
$[11] = t52;
|
|
32596
33151
|
} else {
|
|
32597
|
-
|
|
33152
|
+
t52 = $[11];
|
|
32598
33153
|
}
|
|
32599
|
-
let
|
|
32600
|
-
if ($[
|
|
32601
|
-
|
|
32602
|
-
$[
|
|
32603
|
-
$[
|
|
33154
|
+
let t62;
|
|
33155
|
+
if ($[12] !== props) {
|
|
33156
|
+
t62 = () => props.setDrawerOpen(true);
|
|
33157
|
+
$[12] = props;
|
|
33158
|
+
$[13] = t62;
|
|
32604
33159
|
} else {
|
|
32605
|
-
|
|
33160
|
+
t62 = $[13];
|
|
32606
33161
|
}
|
|
32607
|
-
let
|
|
32608
|
-
if ($[
|
|
32609
|
-
|
|
32610
|
-
$[
|
|
33162
|
+
let t7;
|
|
33163
|
+
if ($[14] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
33164
|
+
t7 = /* @__PURE__ */ jsxRuntime.jsx(ui.MenuIcon, {});
|
|
33165
|
+
$[14] = t7;
|
|
32611
33166
|
} else {
|
|
32612
|
-
|
|
33167
|
+
t7 = $[14];
|
|
32613
33168
|
}
|
|
32614
|
-
let
|
|
32615
|
-
if ($[
|
|
32616
|
-
|
|
32617
|
-
$[
|
|
32618
|
-
$[
|
|
32619
|
-
$[
|
|
33169
|
+
let t8;
|
|
33170
|
+
if ($[15] !== t52 || $[16] !== t62) {
|
|
33171
|
+
t8 = /* @__PURE__ */ jsxRuntime.jsx(ui.IconButton, { color: "inherit", "aria-label": t52, onClick: t62, size: "large", className: "absolute sm:top-2 sm:left-4 top-1 left-2", children: t7 });
|
|
33172
|
+
$[15] = t52;
|
|
33173
|
+
$[16] = t62;
|
|
33174
|
+
$[17] = t8;
|
|
32620
33175
|
} else {
|
|
32621
|
-
|
|
33176
|
+
t8 = $[17];
|
|
32622
33177
|
}
|
|
32623
|
-
const
|
|
32624
|
-
const
|
|
32625
|
-
let
|
|
32626
|
-
if ($[
|
|
32627
|
-
|
|
32628
|
-
$[
|
|
32629
|
-
$[
|
|
33178
|
+
const t9 = props.open;
|
|
33179
|
+
const t10 = props.setDrawerOpen;
|
|
33180
|
+
let t11;
|
|
33181
|
+
if ($[18] !== t) {
|
|
33182
|
+
t11 = t("navigation_drawer");
|
|
33183
|
+
$[18] = t;
|
|
33184
|
+
$[19] = t11;
|
|
32630
33185
|
} else {
|
|
32631
|
-
|
|
33186
|
+
t11 = $[19];
|
|
32632
33187
|
}
|
|
32633
|
-
let
|
|
32634
|
-
if ($[
|
|
32635
|
-
|
|
32636
|
-
$[
|
|
32637
|
-
$[
|
|
32638
|
-
$[
|
|
32639
|
-
$[
|
|
32640
|
-
$[
|
|
33188
|
+
let t12;
|
|
33189
|
+
if ($[20] !== innerDrawer || $[21] !== props.open || $[22] !== props.setDrawerOpen || $[23] !== t11) {
|
|
33190
|
+
t12 = /* @__PURE__ */ jsxRuntime.jsx(ui.Sheet, { side: "left", transparent: true, open: t9, onOpenChange: t10, title: t11, overlayClassName: "bg-white bg-opacity-80 bg-white/80", children: innerDrawer });
|
|
33191
|
+
$[20] = innerDrawer;
|
|
33192
|
+
$[21] = props.open;
|
|
33193
|
+
$[22] = props.setDrawerOpen;
|
|
33194
|
+
$[23] = t11;
|
|
33195
|
+
$[24] = t12;
|
|
32641
33196
|
} else {
|
|
32642
|
-
|
|
33197
|
+
t12 = $[24];
|
|
32643
33198
|
}
|
|
32644
|
-
let
|
|
32645
|
-
if ($[
|
|
32646
|
-
|
|
32647
|
-
|
|
32648
|
-
|
|
33199
|
+
let t13;
|
|
33200
|
+
if ($[25] !== t12 || $[26] !== t8) {
|
|
33201
|
+
t13 = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
33202
|
+
t8,
|
|
33203
|
+
t12
|
|
32649
33204
|
] });
|
|
32650
|
-
$[
|
|
32651
|
-
$[
|
|
32652
|
-
$[
|
|
33205
|
+
$[25] = t12;
|
|
33206
|
+
$[26] = t8;
|
|
33207
|
+
$[27] = t13;
|
|
32653
33208
|
} else {
|
|
32654
|
-
|
|
33209
|
+
t13 = $[27];
|
|
32655
33210
|
}
|
|
32656
|
-
return
|
|
33211
|
+
return t13;
|
|
32657
33212
|
}
|
|
32658
|
-
let
|
|
32659
|
-
if ($[
|
|
32660
|
-
|
|
32661
|
-
width,
|
|
32662
|
-
|
|
33213
|
+
let t5;
|
|
33214
|
+
if ($[28] !== layoutWidth) {
|
|
33215
|
+
t5 = {
|
|
33216
|
+
width: layoutWidth,
|
|
33217
|
+
minWidth: layoutWidth,
|
|
33218
|
+
transition: "left 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, opacity 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, width 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms"
|
|
32663
33219
|
};
|
|
32664
|
-
$[
|
|
32665
|
-
$[
|
|
33220
|
+
$[28] = layoutWidth;
|
|
33221
|
+
$[29] = t5;
|
|
32666
33222
|
} else {
|
|
32667
|
-
|
|
33223
|
+
t5 = $[29];
|
|
32668
33224
|
}
|
|
32669
|
-
let
|
|
32670
|
-
if ($[
|
|
32671
|
-
|
|
32672
|
-
$[
|
|
32673
|
-
$[
|
|
32674
|
-
$[
|
|
32675
|
-
$[
|
|
32676
|
-
$[
|
|
32677
|
-
$[
|
|
33225
|
+
let t6;
|
|
33226
|
+
if ($[30] !== innerDrawer || $[31] !== props.onMouseEnter || $[32] !== props.onMouseLeave || $[33] !== props.onMouseMove || $[34] !== t5) {
|
|
33227
|
+
t6 = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "z-20 relative flex-shrink-0 overflow-visible", onMouseEnter: props.onMouseEnter, onMouseMove: props.onMouseMove, onMouseLeave: props.onMouseLeave, style: t5, children: innerDrawer });
|
|
33228
|
+
$[30] = innerDrawer;
|
|
33229
|
+
$[31] = props.onMouseEnter;
|
|
33230
|
+
$[32] = props.onMouseLeave;
|
|
33231
|
+
$[33] = props.onMouseMove;
|
|
33232
|
+
$[34] = t5;
|
|
33233
|
+
$[35] = t6;
|
|
32678
33234
|
} else {
|
|
32679
|
-
|
|
33235
|
+
t6 = $[35];
|
|
32680
33236
|
}
|
|
32681
|
-
return
|
|
33237
|
+
return t6;
|
|
32682
33238
|
}
|
|
32683
33239
|
function _temp$6(child) {
|
|
32684
33240
|
return child.type.componentType === "Drawer";
|
|
@@ -37441,6 +37997,685 @@
|
|
|
37441
37997
|
marketplace_link_error: "Erro ao vincular o projeto. Por favor, tente novamente.",
|
|
37442
37998
|
marketplace_no_account_id: "Nenhum ID de conta do GCP Marketplace encontrado. Por favor, comece pelo GCP Marketplace."
|
|
37443
37999
|
};
|
|
38000
|
+
const pl = {
|
|
38001
|
+
// ─── Form actions ────────────────────────────────────────────
|
|
38002
|
+
save: "Zapisz",
|
|
38003
|
+
create: "Utwórz",
|
|
38004
|
+
create_copy: "Utwórz kopię",
|
|
38005
|
+
save_and_close: "Zapisz i zamknij",
|
|
38006
|
+
create_copy_and_close: "Utwórz kopię i zamknij",
|
|
38007
|
+
create_and_close: "Utwórz i zamknij",
|
|
38008
|
+
discard: "Odrzuć",
|
|
38009
|
+
clear: "Wyczyść",
|
|
38010
|
+
cancel: "Anuluj",
|
|
38011
|
+
// ─── Entity actions ──────────────────────────────────────────
|
|
38012
|
+
edit: "Edytuj",
|
|
38013
|
+
copy: "Kopiuj",
|
|
38014
|
+
delete: "Usuń",
|
|
38015
|
+
// ─── Delete dialog ───────────────────────────────────────────
|
|
38016
|
+
delete_confirmation_title: "Usunąć?",
|
|
38017
|
+
delete_confirmation_body: "Spowoduje to usunięcie encji. Czy na pewno chcesz kontynuować?",
|
|
38018
|
+
delete_multiple_confirmation_body: "Spowoduje to usunięcie zaznaczonych encji. Czy na pewno chcesz kontynuować?",
|
|
38019
|
+
// ─── Unsaved-changes dialog ───────────────────────────────────
|
|
38020
|
+
unsaved_changes_title: "Niezapisane zmiany",
|
|
38021
|
+
unsaved_changes_body: "Masz niezapisane zmiany. Czy chcesz je odrzucić?",
|
|
38022
|
+
discard_changes: "Odrzuć zmiany",
|
|
38023
|
+
keep_editing: "Kontynuuj edycję",
|
|
38024
|
+
// ─── Collection table / toolbar ──────────────────────────────
|
|
38025
|
+
search: "Szukaj",
|
|
38026
|
+
find_by_id: "Znajdź po ID",
|
|
38027
|
+
find_entity_by_id: "Znajdź encję po ID",
|
|
38028
|
+
filter: "Filtr",
|
|
38029
|
+
filters: "Filtry",
|
|
38030
|
+
clear_filter: "Wyczyść filtr",
|
|
38031
|
+
clear_filter_sort: "Wyczyść filtr/sortowanie",
|
|
38032
|
+
clear_sort: "Wyczyść sortowanie",
|
|
38033
|
+
no_items: "Brak elementów",
|
|
38034
|
+
no_entries_found: "Nie znaleziono wpisów",
|
|
38035
|
+
all_entries_loaded: "Wczytano wszystkie wpisy ({{count}})",
|
|
38036
|
+
create_your_first_entry: "Utwórz swój pierwszy wpis",
|
|
38037
|
+
no_results_filter_sort: "Brak wyników dla zastosowanego filtra/sortowania",
|
|
38038
|
+
add: "Dodaj",
|
|
38039
|
+
remove: "Usuń",
|
|
38040
|
+
multiple_entities: "Wiele encji",
|
|
38041
|
+
unsaved_changes: "Masz niezapisane zmiany w kolekcji {{collectionName}}.",
|
|
38042
|
+
so_empty: "Tak pusto...",
|
|
38043
|
+
no_results: "Brak wyników dla zastosowanego filtra/sortowania",
|
|
38044
|
+
refresh_data: "Odśwież dane",
|
|
38045
|
+
dark_mode: "Ciemny",
|
|
38046
|
+
light_mode: "Jasny",
|
|
38047
|
+
system_mode: "Systemowy",
|
|
38048
|
+
ok: "Ok",
|
|
38049
|
+
save_collection_config: "Zapisz strukturę kolekcji",
|
|
38050
|
+
search_for_more_icons: "Szukaj więcej ikon…",
|
|
38051
|
+
ai_modified: "Zmodyfikowane przez AI",
|
|
38052
|
+
size_label: "Rozmiar",
|
|
38053
|
+
group_by: "Grupuj według",
|
|
38054
|
+
initialize_kanban_order: "Zainicjuj kolejność Kanban",
|
|
38055
|
+
copy_id: "Kopiuj ID",
|
|
38056
|
+
add_specific: "Dodaj {{name}}",
|
|
38057
|
+
select_specific: "Wybierz {{name}}",
|
|
38058
|
+
select_from: "Wybierz z {{name}}",
|
|
38059
|
+
done: "Gotowe",
|
|
38060
|
+
log_out: "Wyloguj się",
|
|
38061
|
+
license_needed: "Wymagana licencja",
|
|
38062
|
+
license_description: "Aby korzystać z FireCMS PRO, potrzebujesz ważnej licencji. Skontaktuj się z nami pod adresem {{email}}, aby uzyskać więcej informacji.",
|
|
38063
|
+
column_cannot_be_edited: "Ta kolumna nie może być edytowana bezpośrednio",
|
|
38064
|
+
close: "Zamknij",
|
|
38065
|
+
unsaved_local_changes: "Niezapisane zmiany lokalne",
|
|
38066
|
+
unsaved_local_changes_description: "Ten dokument został zmodyfikowany lokalnie i zawiera niezapisane zmiany. Zmiany te zostaną utracone, jeśli ich nie zastosujesz.",
|
|
38067
|
+
preview_changes: "Podgląd zmian",
|
|
38068
|
+
apply_changes: "Zastosuj zmiany",
|
|
38069
|
+
discard_local_changes: "Odrzuć zmiany lokalne",
|
|
38070
|
+
preview_local_changes: "Podgląd zmian lokalnych",
|
|
38071
|
+
preview_local_changes_description: "To są zmiany lokalne, które zostaną zastosowane do formularza.",
|
|
38072
|
+
type: "Typ",
|
|
38073
|
+
string: "tekst",
|
|
38074
|
+
number: "liczba",
|
|
38075
|
+
boolean: "wartość logiczna",
|
|
38076
|
+
date: "data",
|
|
38077
|
+
map: "mapa",
|
|
38078
|
+
array: "tablica",
|
|
38079
|
+
arrays_of_arrays_not_supported: "Tablice tablic nie są obsługiwane.",
|
|
38080
|
+
data_type_not_supported: "Typ danych {{dataType}} nie jest jeszcze obsługiwany",
|
|
38081
|
+
passkey_error_unsupported: "Twoje urządzenie lub przeglądarka nie obsługuje kluczy dostępu (passkeys).",
|
|
38082
|
+
admin: "Administrator",
|
|
38083
|
+
home: "Strona główna",
|
|
38084
|
+
this_form_has_errors: "Ten formularz zawiera błędy",
|
|
38085
|
+
error_loading_navigation: "Błąd wczytywania nawigacji",
|
|
38086
|
+
error_loading_auth: "Błąd wczytywania uwierzytelniania",
|
|
38087
|
+
this_form_has_been_modified: "Ten formularz został zmodyfikowany",
|
|
38088
|
+
current_form_in_sync: "Bieżący formularz jest zsynchronizowany z bazą danych",
|
|
38089
|
+
open_in_console: "Otwórz w konsoli",
|
|
38090
|
+
collection_does_not_exist: "Podana kolekcja nie istnieje. Sprawdź konsolę",
|
|
38091
|
+
unexpected_value: "Nieoczekiwana wartość",
|
|
38092
|
+
unexpected_value_click_to_edit: "Nieoczekiwana wartość. Kliknij, aby edytować",
|
|
38093
|
+
unexpected_reference_value: "Nieoczekiwana wartość referencji. Kliknij, aby edytować",
|
|
38094
|
+
copy_url_to_clipboard: "Kopiuj adres URL do schowka",
|
|
38095
|
+
open_image_in_new_tab: "Otwórz obraz w nowej karcie",
|
|
38096
|
+
reference_not_set: "Referencja nie ustawiona",
|
|
38097
|
+
reference_does_not_exist: "Referencja nie istnieje",
|
|
38098
|
+
entity_not_found: "Nie znaleziono encji",
|
|
38099
|
+
file_not_found: "Nie znaleziono pliku",
|
|
38100
|
+
unsaved_changes_in_entity: "Masz niezapisane zmiany w tej encji.",
|
|
38101
|
+
delete_this_role: "Usuń tę rolę",
|
|
38102
|
+
no_roles_yet: "Nie masz jeszcze żadnych ról.",
|
|
38103
|
+
create_default_roles: "Utwórz domyślne role",
|
|
38104
|
+
delete_role_confirmation: "Czy na pewno chcesz usunąć tę rolę?",
|
|
38105
|
+
delete_this_user: "Usuń tego użytkownika",
|
|
38106
|
+
no_users_yet: "Nie ma jeszcze żadnych użytkowników",
|
|
38107
|
+
add_logged_user_as_admin: "Dodaj zalogowanego użytkownika jako administratora",
|
|
38108
|
+
add_current_user_as_admin: "Dodaj bieżącego użytkownika jako administratora",
|
|
38109
|
+
create_default_roles_and_add_admin: "Utwórz domyślne role i dodaj bieżącego użytkownika jako administratora",
|
|
38110
|
+
delete_user_confirmation: "Czy na pewno chcesz usunąć tego użytkownika?",
|
|
38111
|
+
create_your_users_and_roles: "Utwórz użytkowników i role",
|
|
38112
|
+
no_users_or_roles_defined: "Nie masz zdefiniowanych użytkowników ani ról. Możesz utworzyć domyślne role i dodać bieżącego użytkownika jako administratora.",
|
|
38113
|
+
save_before_changing_schema: "Musisz zapisać dokument przed zmianą schematu",
|
|
38114
|
+
edit_schema_for_this_form: "Edytuj schemat tego formularza",
|
|
38115
|
+
no_permissions_to_edit_collection: "Nie masz uprawnień do edycji tej kolekcji",
|
|
38116
|
+
browser_does_not_support_audio: "Twoja przeglądarka nie obsługuje elementu audio.",
|
|
38117
|
+
user_not_found: "Nie znaleziono użytkownika: {{value}}",
|
|
38118
|
+
// ─── Collection view actions ──────────────────────────────────
|
|
38119
|
+
delete_selected: "Usuń",
|
|
38120
|
+
cannot_delete_selected: "Zaznaczono co najmniej jedną encję, której nie można usunąć",
|
|
38121
|
+
// ─── Array / field containers ─────────────────────────────────
|
|
38122
|
+
add_entry: "Dodaj",
|
|
38123
|
+
add_on_top: "Dodaj na górze",
|
|
38124
|
+
add_below: "Dodaj poniżej",
|
|
38125
|
+
add_to_field: "Dodaj do {{fieldName}}",
|
|
38126
|
+
value: "Wartość",
|
|
38127
|
+
key: "Klucz",
|
|
38128
|
+
drag_drop_multiple: "Przeciągnij i upuść pliki tutaj lub kliknij, aby je wybrać. Przeciągnij, aby zmienić kolejność.",
|
|
38129
|
+
drag_drop_single: "Przeciągnij i upuść plik tutaj lub kliknij, aby go wybrać",
|
|
38130
|
+
// ─── Navigation / scaffold ────────────────────────────────────
|
|
38131
|
+
open_menu: "Otwórz menu",
|
|
38132
|
+
close_drawer: "Zamknij panel boczny",
|
|
38133
|
+
navigation_drawer: "Panel nawigacyjny",
|
|
38134
|
+
// ─── Error states ─────────────────────────────────────────────
|
|
38135
|
+
error: "Błąd",
|
|
38136
|
+
error_uploading_file: "Błąd przesyłania pliku",
|
|
38137
|
+
error_deleting: "Błąd podczas usuwania: {{message}}",
|
|
38138
|
+
error_before_delete: "Błąd przed usunięciem: {{message}}",
|
|
38139
|
+
error_updating_asset: "Błąd aktualizacji zasobu",
|
|
38140
|
+
error_deleting_asset: "Błąd usuwania zasobu",
|
|
38141
|
+
error_firestore_index: "Dla tego zapytania wymagany jest indeks Firestore.",
|
|
38142
|
+
create_index: "Utwórz indeks",
|
|
38143
|
+
value_is_not_reference: "Wartość nie jest referencją.",
|
|
38144
|
+
click_to_edit: "Kliknij, aby edytować",
|
|
38145
|
+
data_is_not_array_of_references: "Dane nie są tablicą referencji",
|
|
38146
|
+
// ─── Misc ─────────────────────────────────────────────────────
|
|
38147
|
+
loading: "Wczytywanie",
|
|
38148
|
+
local_changes_applied: "Zmiany lokalne zastosowane w formularzu",
|
|
38149
|
+
local_changes_discarded: "Zmiany lokalne odrzucone",
|
|
38150
|
+
are_you_sure_leave: "Czy na pewno chcesz opuścić tę stronę?",
|
|
38151
|
+
see_console_details: "Więcej informacji w konsoli.",
|
|
38152
|
+
drop_here_create_group: "Upuść tutaj, aby utworzyć nową grupę",
|
|
38153
|
+
filter_for_null_values: "Filtruj puste wartości",
|
|
38154
|
+
value_updated_elsewhere: "Ta wartość została zaktualizowana gdzie indziej",
|
|
38155
|
+
add_property: "Dodaj właściwość",
|
|
38156
|
+
edit_name: "Edytuj {{name}}",
|
|
38157
|
+
this_entity_not_exist: "Ta encja nie istnieje w bazie danych",
|
|
38158
|
+
internal_error: "BŁĄD wewnętrzny",
|
|
38159
|
+
// ─── Rename group dialog ──────────────────────────────────────
|
|
38160
|
+
rename_group: "Zmień nazwę grupy",
|
|
38161
|
+
group_name_label: "Nazwa grupy",
|
|
38162
|
+
group_name_empty_error: "Nazwa grupy nie może być pusta.",
|
|
38163
|
+
group_name_exists_error: "Taka nazwa grupy już istnieje.",
|
|
38164
|
+
// ─── Search ───────────────────────────────────────────────────
|
|
38165
|
+
search_collections: "Szukaj kolekcji",
|
|
38166
|
+
// ─── Navigation groups ────────────────────────────────────────
|
|
38167
|
+
views_group: "Widoki",
|
|
38168
|
+
// ─── Entity Edit View ─────────────────────────────────────────
|
|
38169
|
+
youd_need_to_save_before_additional_collections: "Musisz zapisać encję przed dodaniem kolejnych kolekcji",
|
|
38170
|
+
// ─── Not Found Page ───────────────────────────────────────────
|
|
38171
|
+
page_not_found: "Nie znaleziono strony",
|
|
38172
|
+
page_not_found_body: "Ta strona nie istnieje lub nie masz do niej dostępu",
|
|
38173
|
+
back_to_home: "Wróć do strony głównej",
|
|
38174
|
+
// ─── Collection Editor ─────────────────────────────────────────
|
|
38175
|
+
default_collection_view: "Domyślny widok kolekcji",
|
|
38176
|
+
table_view: "Tabela",
|
|
38177
|
+
cards_view: "Karty",
|
|
38178
|
+
kanban_view: "Kanban",
|
|
38179
|
+
choose_how_entities_displayed_default: "Wybierz, jak encje mają być domyślnie wyświetlane",
|
|
38180
|
+
document_view: "Widok dokumentu",
|
|
38181
|
+
side_panel: "Panel boczny",
|
|
38182
|
+
full_screen: "Pełny ekran",
|
|
38183
|
+
should_documents_opened_full_screen: "Czy dokumenty mają być otwierane na pełnym ekranie, czy w bocznym oknie dialogowym",
|
|
38184
|
+
select_custom_view: "Wybierz widok niestandardowy",
|
|
38185
|
+
no_custom_views_defined: "Nie zdefiniowano żadnych widoków niestandardowych. Zdefiniuj je w ustawieniach dostosowywania przed użyciem tego okna dialogowego.",
|
|
38186
|
+
select_custom_action: "Wybierz akcję niestandardową",
|
|
38187
|
+
no_custom_actions_defined: "Nie zdefiniowano żadnych akcji niestandardowych. Zdefiniuj je w ustawieniach dostosowywania przed użyciem tego okna dialogowego.",
|
|
38188
|
+
no_collections_found: "Nie znaleziono kolekcji",
|
|
38189
|
+
start_building_collections: "Twórz kolekcje w FireCMS bez trudu. Zmapuj je z istniejącymi danymi w bazie, zaimportuj z plików lub skorzystaj z naszych szablonów.",
|
|
38190
|
+
create_first_collection: "Utwórz swoją pierwszą kolekcję",
|
|
38191
|
+
define_collections_programmatically: "Kolekcje możesz też definiować programistycznie.",
|
|
38192
|
+
edit_collection: "Edytuj kolekcję",
|
|
38193
|
+
no_permissions_edit_collection: "Nie masz uprawnień do edycji tej kolekcji",
|
|
38194
|
+
no_permissions_create_collection: "Nie masz uprawnień do tworzenia kolekcji",
|
|
38195
|
+
create_collection: "Utwórz kolekcję",
|
|
38196
|
+
update_collection: "Zaktualizuj kolekcję",
|
|
38197
|
+
new_collection: "Nowa kolekcja",
|
|
38198
|
+
add_new_collection: "Dodaj nową kolekcję",
|
|
38199
|
+
collection_with_name: "Kolekcja {{name}}",
|
|
38200
|
+
change_icon: "Zmień ikonę",
|
|
38201
|
+
is_subcollection_of: "To jest podkolekcja",
|
|
38202
|
+
name: "Nazwa",
|
|
38203
|
+
collection_name_description: "Nazwa tej kolekcji, zwykle w liczbie mnogiej (np. Produkty)",
|
|
38204
|
+
path: "Ścieżka",
|
|
38205
|
+
relative_path_to_parent: "Ścieżka względna do elementu nadrzędnego (nie trzeba podawać ścieżki nadrzędnej)",
|
|
38206
|
+
path_in_database: "Ścieżka, pod którą ta kolekcja jest przechowywana w bazie danych",
|
|
38207
|
+
singular_name: "Nazwa w liczbie pojedynczej",
|
|
38208
|
+
singular_name_description: "Opcjonalnie zdefiniuj nazwę pojedynczą dla encji tej kolekcji",
|
|
38209
|
+
description: "Opis",
|
|
38210
|
+
description_of_collection: "Opis kolekcji, możesz użyć formatowania markdown",
|
|
38211
|
+
collection_id: "ID kolekcji",
|
|
38212
|
+
collection_id_description: "To ID identyfikuje tę kolekcję. Zazwyczaj jest takie samo jak ścieżka.",
|
|
38213
|
+
collection_group: "Grupa kolekcji",
|
|
38214
|
+
collection_group_description: "Grupa kolekcji obejmuje wszystkie kolekcje o tej samej ścieżce. Pozwala to na wykonywanie zapytań w wielu kolekcjach jednocześnie.",
|
|
38215
|
+
advanced_settings: "Ustawienia zaawansowane",
|
|
38216
|
+
doc_history_global: "Historia zmian dokumentu włączona, jeśli jest włączona globalnie",
|
|
38217
|
+
doc_history_enabled: "Historia zmian dokumentu WŁĄCZONA",
|
|
38218
|
+
doc_history_not_enabled: "Historia zmian dokumentu NIE jest włączona",
|
|
38219
|
+
doc_history_description: "Po włączeniu każdy dokument w tej kolekcji będzie miał historię zmian. Jest to przydatne do celów audytowych. Dane są przechowywane w podkolekcji dokumentu w bazie danych o nazwie __history.",
|
|
38220
|
+
document_id_generation: "Generowanie ID dokumentów",
|
|
38221
|
+
code_defined: "Zdefiniowane w kodzie",
|
|
38222
|
+
users_must_define_id: "Użytkownicy muszą podać ID",
|
|
38223
|
+
users_can_define_id: "Użytkownicy mogą podać ID, ale nie jest to wymagane",
|
|
38224
|
+
doc_id_auto_generated: "ID dokumentu generowane jest automatycznie",
|
|
38225
|
+
config_doc_id_generation: "Skonfiguruj sposób generowania ID dokumentów podczas tworzenia nowych encji.",
|
|
38226
|
+
enable_text_search: "Włącz wyszukiwanie tekstowe dla tej kolekcji",
|
|
38227
|
+
text_search_description: "Zezwól na wyszukiwanie tekstowe w tej kolekcji. Jeśli nie określono delegata wyszukiwania tekstowego, użyte zostanie wbudowane lokalne wyszukiwanie tekstowe. Nie jest to zalecane w przypadku dużych kolekcji, ponieważ może powodować problemy z wydajnością i kosztami.",
|
|
38228
|
+
database_id: "ID bazy danych",
|
|
38229
|
+
default_text: "(domyślnie)",
|
|
38230
|
+
custom_actions: "Akcje niestandardowe",
|
|
38231
|
+
more_info: "Więcej informacji",
|
|
38232
|
+
define_custom_actions_cli: "Zdefiniuj własne akcje niestandardowe, przesyłając je za pomocą CLI.",
|
|
38233
|
+
action_defined_in_code: "Ta akcja jest zdefiniowana w kodzie pod kluczem",
|
|
38234
|
+
add_custom_entity_action: "Dodaj niestandardową akcję encji",
|
|
38235
|
+
remove_this_action: "Usunąć tę akcję?",
|
|
38236
|
+
remove_action_warning: "To nie usunie żadnych danych, tylko akcję w CMS",
|
|
38237
|
+
subcollections_of: "Podkolekcje kolekcji",
|
|
38238
|
+
add_subcollection: "Dodaj podkolekcję",
|
|
38239
|
+
custom_views: "Widoki niestandardowe",
|
|
38240
|
+
define_custom_views_cli: "Zdefiniuj własne widoki niestandardowe, przesyłając je za pomocą CLI.",
|
|
38241
|
+
view_defined_in_code: "Ten widok jest zdefiniowany w kodzie pod kluczem",
|
|
38242
|
+
add_custom_entity_view: "Dodaj niestandardowy widok encji",
|
|
38243
|
+
delete_this_subcollection: "Usunąć tę podkolekcję?",
|
|
38244
|
+
remove_collection_warning: "To nie usunie żadnych danych, tylko kolekcję w CMS",
|
|
38245
|
+
remove_this_view: "Usunąć ten widok?",
|
|
38246
|
+
remove_view_warning: "To nie usunie żadnych danych, tylko widok w CMS",
|
|
38247
|
+
no_collection_selected: "Nie wybrano kolekcji",
|
|
38248
|
+
code_for_collection: "Kod dla",
|
|
38249
|
+
use_config_define_json: "Użyj tej konfiguracji, aby zdefiniować kolekcję w formacie JSON.",
|
|
38250
|
+
customise_collection_code: "Jeśli chcesz dostosować kolekcję w kodzie, możesz dodać ten kod kolekcji do konfiguracji swojej aplikacji CMS.",
|
|
38251
|
+
copied: "Skopiowano",
|
|
38252
|
+
property_cant_be_edited: "Tej właściwości nie można edytować",
|
|
38253
|
+
property_not_editable_description: "Możesz nie mieć uprawnień do jej edycji lub jest ona zdefiniowana w kodzie z flagą editable ustawioną na false.",
|
|
38254
|
+
delete_this_property: "Usunąć tę właściwość?",
|
|
38255
|
+
delete_property_warning: "To nie usunie żadnych danych, tylko zmodyfikuje kolekcję.",
|
|
38256
|
+
error_must_specify_id: "Musisz podać ID dla tego pola",
|
|
38257
|
+
error_id_format: "ID może zawierać tylko litery, cyfry i podkreślenia (_) i nie może zaczynać się od cyfry",
|
|
38258
|
+
error_id_already_exists: "Istnieje już inne pole z tym ID",
|
|
38259
|
+
error_must_specify_title: "Musisz podać tytuł dla tego pola",
|
|
38260
|
+
custom_or_other: "Niestandardowe/Inne",
|
|
38261
|
+
select_property_widget: "Wybierz widżet właściwości",
|
|
38262
|
+
error_changing_data_type: "Ten widżet używa innego typu danych niż pierwotnie wybrany widżet. Może to powodować błędy z istniejącymi danymi.",
|
|
38263
|
+
required: "Wymagane",
|
|
38264
|
+
enum_form_dialog: "Okno dialogowe formularza wyliczeniowego",
|
|
38265
|
+
imported_data_preview: "Podgląd zaimportowanych danych",
|
|
38266
|
+
entities_with_same_id_overwritten: "Encje o tym samym ID zostaną nadpisane",
|
|
38267
|
+
collection_editor: "Edytor kolekcji",
|
|
38268
|
+
properties_in_this_group: "Właściwości w tej grupie",
|
|
38269
|
+
data_property_mapping: "Mapowanie danych na właściwości",
|
|
38270
|
+
property_edit_view: "Widok edycji właściwości",
|
|
38271
|
+
all_of_these: "Wszystkie z nich",
|
|
38272
|
+
any_of_these: "Dowolna z nich",
|
|
38273
|
+
only_admins_edit_roles: "Tylko administratorzy mogą edytować role",
|
|
38274
|
+
error_user_not_found: "Nie znaleziono użytkownika",
|
|
38275
|
+
role: "Rola",
|
|
38276
|
+
name_of_this_role: "Nazwa tej roli",
|
|
38277
|
+
id_of_this_role: "ID tej roli",
|
|
38278
|
+
create_entities: "Tworzenie encji",
|
|
38279
|
+
read_entities: "Odczyt encji",
|
|
38280
|
+
update_entities: "Aktualizacja encji",
|
|
38281
|
+
delete_entities: "Usuwanie encji",
|
|
38282
|
+
all_collections: "Wszystkie kolekcje",
|
|
38283
|
+
create_entities_in_collections: "Tworzenie encji w kolekcjach",
|
|
38284
|
+
access_all_data_in_every_collection: "Dostęp do wszystkich danych w każdej kolekcji",
|
|
38285
|
+
update_data_in_any_collection: "Aktualizacja danych w dowolnej kolekcji",
|
|
38286
|
+
delete_data_in_any_collection: "Usuwanie danych w dowolnej kolekcji",
|
|
38287
|
+
allow_all_permissions_in_this_collections: "Zezwól na wszystkie uprawnienia w tych kolekcjach",
|
|
38288
|
+
all: "Wszystkie",
|
|
38289
|
+
customise_permissions_description: "Możesz dostosować uprawnienia, jakie użytkownicy z tą rolą mają w encjach każdej kolekcji",
|
|
38290
|
+
create_collections: "Tworzenie kolekcji",
|
|
38291
|
+
yes: "Tak",
|
|
38292
|
+
no: "Nie",
|
|
38293
|
+
can_user_create_collections: "Czy użytkownik może tworzyć kolekcje",
|
|
38294
|
+
edit_collections: "Edycja kolekcji",
|
|
38295
|
+
only_own_collections: "Tylko swoje",
|
|
38296
|
+
own: "Własne",
|
|
38297
|
+
can_user_edit_collections: "Czy użytkownik może edytować kolekcje",
|
|
38298
|
+
delete_collections: "Usuwanie kolekcji",
|
|
38299
|
+
can_user_delete_collections: "Czy użytkownik może usuwać kolekcje",
|
|
38300
|
+
error_saving_role: "Wystąpił błąd podczas zapisywania tej roli",
|
|
38301
|
+
create_role: "Utwórz rolę",
|
|
38302
|
+
update: "Aktualizuj",
|
|
38303
|
+
only_admins_change_roles: "Tylko administratorzy mogą zmieniać role",
|
|
38304
|
+
must_be_at_least_one_admin: "Musi istnieć co najmniej jeden administrator",
|
|
38305
|
+
logged_user_not_found: "Nie znaleziono zalogowanego użytkownika",
|
|
38306
|
+
user: "Użytkownik",
|
|
38307
|
+
user_id: "ID użytkownika",
|
|
38308
|
+
name_of_this_user: "Nazwa tego użytkownika",
|
|
38309
|
+
email_of_this_user: "Adres e-mail tego użytkownika",
|
|
38310
|
+
roles: "Role",
|
|
38311
|
+
create_user: "Utwórz użytkownika",
|
|
38312
|
+
users: "Użytkownicy",
|
|
38313
|
+
add_user: "Dodaj użytkownika",
|
|
38314
|
+
add_role: "Dodaj rolę",
|
|
38315
|
+
is_admin: "Jest administratorem",
|
|
38316
|
+
default_permissions: "Domyślne uprawnienia",
|
|
38317
|
+
created_on: "Utworzono",
|
|
38318
|
+
email: "E-mail",
|
|
38319
|
+
id: "ID",
|
|
38320
|
+
read: "Odczyt",
|
|
38321
|
+
column_in_file: "Kolumna w pliku",
|
|
38322
|
+
map_to_property: "Zmapuj na właściwość",
|
|
38323
|
+
default_values: "Wartości domyślne",
|
|
38324
|
+
default_values_description: "Możesz wybrać wartość domyślną dla niezmapowanych kolumn i pustych wartości:",
|
|
38325
|
+
property: "Właściwość",
|
|
38326
|
+
default_value: "Wartość domyślna",
|
|
38327
|
+
autogenerate_id: "Generuj ID automatycznie",
|
|
38328
|
+
id_column_description: "Kolumna, która będzie używana jako ID dla każdego dokumentu",
|
|
38329
|
+
do_not_set_value: "Nie ustawiaj wartości",
|
|
38330
|
+
set_value_to_true: "Ustaw wartość na true",
|
|
38331
|
+
set_value_to_false: "Ustaw wartość na false",
|
|
38332
|
+
drag_and_drop_file: "Przeciągnij i upuść plik tutaj lub kliknij, aby go przesłać",
|
|
38333
|
+
error_saving_data: "Błąd zapisywania danych",
|
|
38334
|
+
retry: "Spróbuj ponownie",
|
|
38335
|
+
saving_data: "Zapisywanie danych",
|
|
38336
|
+
entities_saved: "zapisanych encji",
|
|
38337
|
+
do_not_close_tab: "Nie zamykaj tej karty, w przeciwnym razie import zostanie przerwany",
|
|
38338
|
+
import: "Importuj",
|
|
38339
|
+
import_data: "Importuj dane",
|
|
38340
|
+
upload_file_description: "Prześlij plik CSV, Excel lub JSON i zmapuj go do istniejącego schematu",
|
|
38341
|
+
back: "Wstecz",
|
|
38342
|
+
next: "Dalej",
|
|
38343
|
+
save_data: "Zapisz dane",
|
|
38344
|
+
use_column_as_id: "Użyj tej kolumny jako ID",
|
|
38345
|
+
do_not_import_property: "Nie importuj tej właściwości",
|
|
38346
|
+
entities_will_be_overwritten: "Encje o tym samym ID zostaną nadpisane",
|
|
38347
|
+
data_imported_successfully: "Dane zostały pomyślnie zaimportowane",
|
|
38348
|
+
export: "Eksportuj",
|
|
38349
|
+
export_data: "Eksportuj dane",
|
|
38350
|
+
download_table_csv: "Pobierz zawartość tej tabeli jako plik CSV",
|
|
38351
|
+
csv: "CSV",
|
|
38352
|
+
json: "JSON",
|
|
38353
|
+
dates_as_timestamps: "Daty jako znaczniki czasu",
|
|
38354
|
+
dates_as_strings: "Daty jako ciągi znaków",
|
|
38355
|
+
flatten_arrays: "Spłaszcz tablice",
|
|
38356
|
+
download: "Pobierz",
|
|
38357
|
+
large_number_of_documents: "Ta kolekcja zawiera dużą liczbę dokumentów ({{count}}).",
|
|
38358
|
+
include_undefined_values: "Uwzględnij niezdefiniowane wartości",
|
|
38359
|
+
submit: "Wyślij",
|
|
38360
|
+
no_filterable_properties: "Brak dostępnych właściwości do filtrowania",
|
|
38361
|
+
apply_filters: "Zastosuj filtry",
|
|
38362
|
+
list: "Lista",
|
|
38363
|
+
cards: "Karty",
|
|
38364
|
+
board: "Tablica",
|
|
38365
|
+
initialize_kanban_order_desc: "Spowoduje to przypisanie sekwencyjnych wartości kolejności wszystkim elementom, które ich nie mają. Elementy zachowają swoją bieżącą kolejność w ramach każdej kolumny.",
|
|
38366
|
+
kanban_view_not_available: "Widok Kanban jest niedostępny",
|
|
38367
|
+
kanban_view_requires_enum: "Widok Kanban wymaga właściwości tekstowej z wartościami wyliczeniowymi, aby grupować encje w kolumny. Dodaj właściwość wyliczeniową do schematu swojej kolekcji, aby użyć tego widoku.",
|
|
38368
|
+
no_enum_values_configured: "Nie skonfigurowano wartości wyliczeniowych dla właściwości „{{property}}”",
|
|
38369
|
+
items_need_backfill: "Niektóre elementy nie mają ustawionych wartości kolejności. Zainicjuj je, aby włączyć zmianę kolejności metodą przeciągnij i upuść.",
|
|
38370
|
+
initialize: "Zainicjuj",
|
|
38371
|
+
confirm_multiple_delete: "Potwierdzić wielokrotne usunięcie?",
|
|
38372
|
+
delete_entity_confirm_title: "Czy chcesz usunąć ten element: {{entityName}}?",
|
|
38373
|
+
/** AI Collection Generator Popover */
|
|
38374
|
+
generate_collection_with_ai: "Wygeneruj kolekcję za pomocą AI",
|
|
38375
|
+
modify_collection_with_ai: "Zmodyfikuj kolekcję za pomocą AI",
|
|
38376
|
+
describe_collection_to_create: "Opisz kolekcję, którą chcesz utworzyć.",
|
|
38377
|
+
describe_changes_to_make: "Opisz zmiany, które chcesz wprowadzić w tej kolekcji.",
|
|
38378
|
+
ai_placeholder_create: "np. Utwórz kolekcję produktów z nazwą, ceną, opisem i kategorią...",
|
|
38379
|
+
ai_placeholder_modify: "np. Dodaj pole obrazu miniatury z przechowywaniem, ustaw cenę jako wymaganą...",
|
|
38380
|
+
ai_assist: "Asystent AI",
|
|
38381
|
+
generating: "Generowanie...",
|
|
38382
|
+
/** Recently extracted strings for collection editor */
|
|
38383
|
+
this_is_subcollection_of: "To jest podkolekcja",
|
|
38384
|
+
use_existing_paths_database: "Użyj jednej z istniejących ścieżek w swojej bazie danych:",
|
|
38385
|
+
describe_collection_ai: "Opisz swoją kolekcję dla AI:",
|
|
38386
|
+
generate_with_ai: "Generuj za pomocą AI",
|
|
38387
|
+
create_from_json_config: "Utwórz z konfiguracji JSON:",
|
|
38388
|
+
paste_json_config: "Wklej konfigurację JSON",
|
|
38389
|
+
create_collection_from_file_formats: "Utwórz kolekcję z pliku (csv, json, xls, xlsx...)",
|
|
38390
|
+
select_template: "Wybierz szablon:",
|
|
38391
|
+
products: "Produkty",
|
|
38392
|
+
collection_products_subtitle: "Kolekcja produktów ze zdjęciami, cenami i stanem magazynowym",
|
|
38393
|
+
collection_users_subtitle: "Kolekcja użytkowników z adresami e-mail, imionami i rolami",
|
|
38394
|
+
blog_posts: "Wpisy na blogu",
|
|
38395
|
+
collection_blog_posts_subtitle: "Kolekcja wpisów na blogu ze zdjęciami, autorami i rozbudowaną treścią",
|
|
38396
|
+
pages: "Strony",
|
|
38397
|
+
collection_pages_subtitle: "Kolekcja stron ze zdjęciami, autorami i rozbudowaną treścią",
|
|
38398
|
+
continue_from_scratch: "Kontynuuj od zera",
|
|
38399
|
+
/** Admin views config */
|
|
38400
|
+
cms_users: "Użytkownicy CMS",
|
|
38401
|
+
roles_menu: "Role",
|
|
38402
|
+
project_settings: "Ustawienia projektu",
|
|
38403
|
+
firestore_manager: "Menedżer Firestore",
|
|
38404
|
+
manage_your_firestore_data: "Zarządzaj danymi w Firestore",
|
|
38405
|
+
// ─── FireCMS Cloud Login ──────────────────────────────────────
|
|
38406
|
+
build_admin_panel_in_minutes: "Zbuduj panel administracyjny Firebase w kilka minut",
|
|
38407
|
+
go_live_instantly: "Uruchom natychmiast:",
|
|
38408
|
+
create_production_ready_back_offices: "Twórz gotowe do wdrożenia panele administracyjne",
|
|
38409
|
+
without_the_frontend_hassle: "bez kłopotów z frontendem.",
|
|
38410
|
+
automatic_setup: "Automatyczna konfiguracja",
|
|
38411
|
+
from_your_existing_firestore_data: "na podstawie Twoich istniejących danych w Firestore.",
|
|
38412
|
+
seamless_real_time_firebase_integration: "Płynna integracja z Firebase w czasie rzeczywistym.",
|
|
38413
|
+
intuitive_spreadsheet_like_ui: "Intuicyjny interfejs przypominający arkusz kalkulacyjny,",
|
|
38414
|
+
your_whole_team_can_use: "z którego może korzystać cały Twój zespół.",
|
|
38415
|
+
focus_on_your_app: "Skup się na swojej aplikacji,",
|
|
38416
|
+
not_the_admin_panel: "a nie na panelu administracyjnym.",
|
|
38417
|
+
join_our_newsletter: "Dołącz do naszego newslettera. Bez spamu, tylko ważne aktualizacje!",
|
|
38418
|
+
by_signing_in_you_agree_to_our: "Logując się, akceptujesz nasz",
|
|
38419
|
+
terms_and_conditions: "Regulamin",
|
|
38420
|
+
and_our: "oraz naszą",
|
|
38421
|
+
privacy_policy: "Politykę prywatności",
|
|
38422
|
+
firecms_cloud_google_disclosure: "Korzystanie i przekazywanie przez FireCMS Cloud informacji uzyskanych z API Google do jakiejkolwiek innej aplikacji będzie zgodne z",
|
|
38423
|
+
google_api_services_user_data_policy: "Polityką dotyczącą danych użytkowników usług API Google",
|
|
38424
|
+
including_the_limited_use_requirements: "w tym z wymaganiami dotyczącymi ograniczonego użytkowania.",
|
|
38425
|
+
email_password: "E-mail/hasło",
|
|
38426
|
+
sign_in_with_google: "Zaloguj się przez Google",
|
|
38427
|
+
// --- Auth error messages ---
|
|
38428
|
+
auth_user_not_found: "Nie znaleziono użytkownika",
|
|
38429
|
+
auth_wrong_password: "Nieprawidłowe hasło. Spróbuj ponownie.",
|
|
38430
|
+
auth_user_disabled: "Użytkownik jest zablokowany. Skontaktuj się z pomocą techniczną.",
|
|
38431
|
+
auth_account_exists_with_different_credential: "Konto istnieje z inną metodą logowania",
|
|
38432
|
+
auth_email_already_in_use: "Ten adres e-mail jest już używany",
|
|
38433
|
+
auth_google_permissions_required: "Musisz przyznać dodatkowe uprawnienia, aby zarządzać swoimi projektami Google Cloud",
|
|
38434
|
+
auth_invalid_email_password: "Podaj zarówno adres e-mail, jak i hasło",
|
|
38435
|
+
auth_enter_email_first: "Najpierw podaj swój adres e-mail",
|
|
38436
|
+
auth_password_reset_sent: "Wysłano e-mail resetujący hasło",
|
|
38437
|
+
auth_sign_in_account: "Zaloguj się do swojego konta",
|
|
38438
|
+
auth_create_new_account: "Utwórz nowe konto",
|
|
38439
|
+
auth_password: "Hasło",
|
|
38440
|
+
auth_reset_password: "Zresetuj hasło",
|
|
38441
|
+
auth_new_user: "Nowy użytkownik?",
|
|
38442
|
+
auth_have_account: "Masz już konto?",
|
|
38443
|
+
auth_sign_in: "Zaloguj się",
|
|
38444
|
+
auth_sign_up: "Zarejestruj się",
|
|
38445
|
+
// --- SaaS Subscriptions ---
|
|
38446
|
+
subscriptions: "Subskrypcje",
|
|
38447
|
+
manage_your_subscriptions_in_stripe: "Zarządzaj swoimi subskrypcjami w Stripe",
|
|
38448
|
+
go_to_your_stripe_portal: "Przejdź do swojego portalu Stripe, aby zobaczyć historię płatności. Możesz tam również zarządzać subskrypcjami powiązanymi z zalogowanym użytkownikiem.",
|
|
38449
|
+
your_pro_licenses: "Twoje licencje PRO",
|
|
38450
|
+
create_new_license: "Utwórz nową licencję",
|
|
38451
|
+
create_subscriptions_in_this_section: "Twórz subskrypcje w tej sekcji tylko w przypadku samodzielnie hostowanego FireCMS PRO. Jeśli korzystasz z FireCMS Cloud, możesz zaktualizować swój projekt w ustawieniach projektu.",
|
|
38452
|
+
if_you_are_an_agency: "Jeśli jesteś agencją, możesz swobodnie odsprzedawać swoją licencję swoim klientom.",
|
|
38453
|
+
if_you_have_any_questions: "Jeśli masz pytania lub potrzebujesz pomocy, skontaktuj się z nami pod adresem",
|
|
38454
|
+
you_have_not_created_any_pro_licenses: "Nie masz jeszcze żadnych licencji FireCMS PRO",
|
|
38455
|
+
archive: "Archiwizuj",
|
|
38456
|
+
licensed_projects_lowercase: "licencjonowanych projektów",
|
|
38457
|
+
manage: "Zarządzaj",
|
|
38458
|
+
update_payment_method: "Zaktualizuj metodę płatności",
|
|
38459
|
+
your_firecms_cloud_projects: "Twoje projekty FireCMS Cloud",
|
|
38460
|
+
status_active: "Aktywna",
|
|
38461
|
+
status_trialing: "Okres próbny",
|
|
38462
|
+
status_past_due: "Zaległa płatność",
|
|
38463
|
+
status_canceled: "Anulowana",
|
|
38464
|
+
status_unpaid: "Nieopłacona",
|
|
38465
|
+
status_incomplete: "Niekompletna",
|
|
38466
|
+
status_incomplete_expired: "Niekompletna, wygasła",
|
|
38467
|
+
status_unknown: "Nieznany",
|
|
38468
|
+
plan_free: "Brak subskrypcji",
|
|
38469
|
+
plan_cloud_plus: "Subskrybowany",
|
|
38470
|
+
plan_pro: "Pro",
|
|
38471
|
+
plan_unknown: "Nieznany plan",
|
|
38472
|
+
auto_setup_collections_button: "Automatycznie skonfiguruj kolekcje",
|
|
38473
|
+
auto_setup_collections_title: "Automatycznie skonfigurować kolekcje?",
|
|
38474
|
+
auto_setup_collections_desc: "Spowoduje to automatyczne utworzenie konfiguracji kolekcji dla kolekcji, które <b>NIE</b> są jeszcze zmapowane",
|
|
38475
|
+
setting_up_collections: "Konfigurowanie kolekcji",
|
|
38476
|
+
setting_up_collection: "Konfigurowanie {{name}}",
|
|
38477
|
+
no_collections_found_to_setup: "Nie znaleziono kolekcji do skonfigurowania.",
|
|
38478
|
+
collections_have_been_setup: "Kolekcje zostały automatycznie skonfigurowane.",
|
|
38479
|
+
error_setting_up_collections: "Błąd podczas automatycznej konfiguracji kolekcji",
|
|
38480
|
+
setup_collections_title: "Skonfiguruj kolekcje",
|
|
38481
|
+
setup_collections_select_desc: "Wybierz kolekcje do automatycznej konfiguracji:",
|
|
38482
|
+
select_all: "Zaznacz wszystkie",
|
|
38483
|
+
deselect_all: "Odznacz wszystkie",
|
|
38484
|
+
setup_collections_confirm: "Skonfiguruj ({{count}})",
|
|
38485
|
+
collection_setup_success: "{{name}} została skonfigurowana",
|
|
38486
|
+
go_to_collection: "Przejdź do kolekcji",
|
|
38487
|
+
// --- Home Suggestions ---
|
|
38488
|
+
add_your: "Dodaj swoje",
|
|
38489
|
+
database_collections: "kolekcje bazy danych",
|
|
38490
|
+
to_firecms: "do FireCMS",
|
|
38491
|
+
no_unmapped_collections: "Brak niezmapowanych kolekcji w bazie danych",
|
|
38492
|
+
query_and_update_with_datatalk: "Odpytuj i aktualizuj swoje dane w języku naturalnym za pomocą",
|
|
38493
|
+
// --- SaaS Welcome ---
|
|
38494
|
+
welcome_to_firecms: "Witamy w FireCMS Cloud",
|
|
38495
|
+
admin_panel_ready_bring_data: "Twój panel administracyjny jest gotowy. Wprowadźmy Twoje dane.",
|
|
38496
|
+
admin_panel_ready_get_started: "Twój panel administracyjny jest gotowy. Oto jak zacząć.",
|
|
38497
|
+
auto_detect_collections: "Automatyczne wykrywanie kolekcji",
|
|
38498
|
+
auto_detect_collections_desc: "Pozwól AI przeskanować Twoją bazę danych i automatycznie wygenerować schematy kolekcji.",
|
|
38499
|
+
create_a_collection: "Utwórz kolekcję",
|
|
38500
|
+
create_collection_desc: "Ręcznie zdefiniuj swoją pierwszą kolekcję od podstaw za pomocą edytora wizualnego.",
|
|
38501
|
+
read_the_docs: "Przeczytaj dokumentację",
|
|
38502
|
+
read_the_docs_desc: "Dowiedz się, jak dostosowywać pola, widoki, akcje i więcej.",
|
|
38503
|
+
explore_docs: "Poznaj dokumentację",
|
|
38504
|
+
want_to_customize_with_code: "Chcesz dostosować za pomocą kodu? Uruchom",
|
|
38505
|
+
to_scaffold_a_local_project: "aby wygenerować lokalny projekt.",
|
|
38506
|
+
// ─── Collection Editor — Validation ──────────────────────────
|
|
38507
|
+
validation: "Walidacja",
|
|
38508
|
+
unique: "Unikalne",
|
|
38509
|
+
required_message: "Treść komunikatu o wymaganym polu",
|
|
38510
|
+
required_tooltip: "Nie będzie można zapisać tej encji, jeśli ta wartość nie jest ustawiona",
|
|
38511
|
+
unique_tooltip: "Nie może istnieć wiele encji z tą samą wartością",
|
|
38512
|
+
lowercase: "Małe litery",
|
|
38513
|
+
uppercase: "Wielkie litery",
|
|
38514
|
+
trim: "Przytnij",
|
|
38515
|
+
exact_length: "Dokładna długość",
|
|
38516
|
+
min_length: "Minimalna długość",
|
|
38517
|
+
max_length: "Maksymalna długość",
|
|
38518
|
+
matches_regex: "Pasuje do wyrażenia regularnego",
|
|
38519
|
+
not_valid_regexp: "Nieprawidłowe wyrażenie regularne",
|
|
38520
|
+
regex_helper: "np. /^\\d+$/ tylko dla cyfr",
|
|
38521
|
+
min_value: "Wartość minimalna",
|
|
38522
|
+
max_value: "Wartość maksymalna",
|
|
38523
|
+
less_than: "Mniejsza niż",
|
|
38524
|
+
more_than: "Większa niż",
|
|
38525
|
+
positive_value: "Wartość dodatnia",
|
|
38526
|
+
negative_value: "Wartość ujemna",
|
|
38527
|
+
integer_value: "Wartość całkowita",
|
|
38528
|
+
// ─── Collection Editor — Property Edit ───────────────────────
|
|
38529
|
+
invalid_regular_expression: "Nieprawidłowe wyrażenie regularne",
|
|
38530
|
+
must_specify_target_collection: "Musisz określić docelową kolekcję dla tego pola",
|
|
38531
|
+
need_specify_repeat_field: "Musisz określić pole powtarzalne",
|
|
38532
|
+
need_specify_block_properties: "Musisz określić właściwości tego bloku",
|
|
38533
|
+
incomplete_condition: "Niekompletny warunek – wybierz pole",
|
|
38534
|
+
field_name: "Nazwa pola",
|
|
38535
|
+
// ─── Collection Editor — Display & Config ────────────────────
|
|
38536
|
+
kanban_column_property: "Właściwość kolumny Kanban",
|
|
38537
|
+
select_a_property: "Wybierz właściwość",
|
|
38538
|
+
kanban_property_not_found: "Właściwość „{{property}}” nie istnieje lub nie jest tekstową właściwością wyliczeniową. Wybierz prawidłową właściwość lub wyczyść wybór.",
|
|
38539
|
+
no_enum_string_properties: "Nie znaleziono tekstowych właściwości wyliczeniowych. Dodaj właściwość tekstową z enumValues, aby użyć widoku Kanban.",
|
|
38540
|
+
kanban_column_description: "Wybierz właściwość tekstową z wartościami wyliczeniowymi, aby grupować encje w kolumny",
|
|
38541
|
+
create_property: "+ Utwórz właściwość „{{property}}”",
|
|
38542
|
+
order_property: "Właściwość kolejności",
|
|
38543
|
+
order_property_not_found: "Właściwość „{{property}}” nie istnieje lub nie jest właściwością liczbową. Wybierz prawidłową właściwość lub wyczyść wybór.",
|
|
38544
|
+
no_number_properties: "Nie znaleziono właściwości liczbowych. Dodaj właściwość liczbową, aby włączyć sortowanie.",
|
|
38545
|
+
order_property_description: "Wybierz właściwość liczbową, aby zachować kolejność elementów",
|
|
38546
|
+
display_settings: "Ustawienia wyświetlania",
|
|
38547
|
+
default_row_size: "Domyślny rozmiar wiersza",
|
|
38548
|
+
side_dialog_width: "Szerokość okna bocznego",
|
|
38549
|
+
side_dialog_width_description: "Opcjonalnie zdefiniuj szerokość (w pikselach) bocznego okna encji. Wartość domyślna to 768px",
|
|
38550
|
+
inline_editing_enabled: "Dane można edytować bezpośrednio w widoku tabeli",
|
|
38551
|
+
inline_editing_disabled: "Dane można edytować tylko w widoku formularza",
|
|
38552
|
+
inline_editing_description: "Zezwól na edycję danych bezpośrednio w widoku tabeli, bez otwierania widoku formularza.",
|
|
38553
|
+
include_json_view: "Uwzględnij widok JSON",
|
|
38554
|
+
no_json_view: "Nie uwzględniaj widoku JSON",
|
|
38555
|
+
json_view_description: "Uwzględnij reprezentację JSON dokumentu.",
|
|
38556
|
+
not_found_suffix: "nie znaleziono",
|
|
38557
|
+
// ─── Editor ─────────────────────────────────────────────────
|
|
38558
|
+
editor_text: "Tekst",
|
|
38559
|
+
editor_text_description: "Po prostu zacznij pisać zwykły tekst.",
|
|
38560
|
+
editor_heading_1: "Nagłówek 1",
|
|
38561
|
+
editor_heading_1_description: "Duży nagłówek sekcji.",
|
|
38562
|
+
editor_heading_2: "Nagłówek 2",
|
|
38563
|
+
editor_heading_2_description: "Średni nagłówek sekcji.",
|
|
38564
|
+
editor_heading_3: "Nagłówek 3",
|
|
38565
|
+
editor_heading_3_description: "Mały nagłówek sekcji.",
|
|
38566
|
+
editor_todo_list: "Lista zadań",
|
|
38567
|
+
editor_todo_list_description: "Śledź zadania za pomocą listy do zrobienia.",
|
|
38568
|
+
editor_bullet_list: "Lista punktowana",
|
|
38569
|
+
editor_bullet_list_description: "Utwórz prostą listę punktowaną.",
|
|
38570
|
+
editor_numbered_list: "Lista numerowana",
|
|
38571
|
+
editor_numbered_list_description: "Utwórz listę z numeracją.",
|
|
38572
|
+
editor_quote: "Cytat",
|
|
38573
|
+
editor_quote_description: "Uchwyć cytat.",
|
|
38574
|
+
editor_code: "Kod",
|
|
38575
|
+
editor_code_description: "Wstaw fragment kodu.",
|
|
38576
|
+
editor_image: "Obraz",
|
|
38577
|
+
editor_image_description: "Prześlij obraz ze swojego komputera.",
|
|
38578
|
+
editor_multiple: "Wielokrotne",
|
|
38579
|
+
editor_link: "Link",
|
|
38580
|
+
editor_save: "Zapisz",
|
|
38581
|
+
editor_cancel: "Anuluj",
|
|
38582
|
+
editor_remove_link: "Usuń link",
|
|
38583
|
+
editor_paste_or_type_link: "Wklej lub wpisz link",
|
|
38584
|
+
editor_open_in_new_window: "Otwórz w nowym oknie",
|
|
38585
|
+
editor_bold: "Pogrubienie",
|
|
38586
|
+
editor_italic: "Kursywa",
|
|
38587
|
+
editor_underline: "Podkreślenie",
|
|
38588
|
+
editor_strikethrough: "Przekreślenie",
|
|
38589
|
+
editor_autocomplete: "Autouzupełnianie",
|
|
38590
|
+
editor_autocomplete_description: "Dodaj tekst na podstawie kontekstu.",
|
|
38591
|
+
// ─── Text Search Dialog ─────────────────────────────────────
|
|
38592
|
+
text_search_dialog_title: "Włącz wyszukiwanie tekstowe",
|
|
38593
|
+
text_search_local_not_recommended: "Lokalne wyszukiwanie tekstowe nie jest zalecane dla dużych kolekcji.",
|
|
38594
|
+
text_search_local_fetch_warning: "Pamiętaj, że włączenie lokalnego wyszukiwania tekstowego wymaga pobrania wszystkich dokumentów z kolekcji i zapisania ich w przeglądarce. Może to być nieefektywne w przypadku dużych kolekcji, a także może wiązać się z dodatkowymi kosztami.",
|
|
38595
|
+
text_search_external_suggestion: "W przypadku większych kolekcji zalecamy użycie zewnętrznej wyszukiwarki, takiej jak Algolia lub Elastic Search, oraz przypisanie delegata wyszukiwania do swojej konfiguracji.",
|
|
38596
|
+
text_search_local_description: "Lokalne wyszukiwanie tekstowe to najprostszy sposób na włączenie wyszukiwania tekstowego w kolekcji. Wczytuje wszystkie dokumenty kolekcji w przeglądarce i przeprowadza wyszukiwanie lokalnie. Jest to zalecana opcja dla małych kolekcji.",
|
|
38597
|
+
text_search_own_implementation: "Zaimplementowano własny kontroler wyszukiwania tekstowego. Możesz włączyć wyszukiwanie tekstowe dla swojej kolekcji.",
|
|
38598
|
+
text_search_enable_for_collection: "Włącz dla tej kolekcji",
|
|
38599
|
+
text_search_enable_for_project: "Włącz dla projektu",
|
|
38600
|
+
text_search_enabled_snackbar: "Lokalne wyszukiwanie tekstowe włączone",
|
|
38601
|
+
// ─── Cloud Project Settings ──────────────────────────────────
|
|
38602
|
+
settings_subscription_plan: "Plan subskrypcji",
|
|
38603
|
+
settings_subscribed_to: "Obecnie subskrybujesz",
|
|
38604
|
+
settings_no_active_subscription: "Obecnie ten projekt nie ma aktywnej subskrypcji.",
|
|
38605
|
+
settings_trial_valid_until: "Twój okres próbny jest ważny do {{date}}.",
|
|
38606
|
+
settings_features_intro: "Oto niektóre z funkcji, z których już korzystasz, używając FireCMS Cloud",
|
|
38607
|
+
settings_feature_managed_service: "Zarządzana, zawsze aktualna usługa",
|
|
38608
|
+
settings_feature_local_text_search: "Lokalne wyszukiwanie tekstowe",
|
|
38609
|
+
settings_feature_unlimited_users_roles: "Nieograniczona liczba użytkowników i ról",
|
|
38610
|
+
settings_feature_theme_logo: "Dostosowywanie motywu i logo",
|
|
38611
|
+
settings_feature_custom_fields_views: "Niestandardowe pola formularzy i widoki",
|
|
38612
|
+
settings_feature_secondary_databases: "Dodatkowe bazy danych",
|
|
38613
|
+
settings_feature_ai_content: "Generowanie treści AI za pomocą OpenAI i Google",
|
|
38614
|
+
settings_feature_unlimited_export: "Nieograniczony eksport danych",
|
|
38615
|
+
settings_feature_appcheck: "AppCheck",
|
|
38616
|
+
settings_heading: "Ustawienia",
|
|
38617
|
+
settings_project_name: "Nazwa projektu",
|
|
38618
|
+
settings_default_language: "Język domyślny",
|
|
38619
|
+
settings_default_language_caption: "Wybierz język bazowy dla tego projektu. Użytkownicy mogą zmienić tę preferencję w swoich ustawieniach osobistych.",
|
|
38620
|
+
settings_enable_local_text_search: "Włącz lokalne wyszukiwanie tekstowe",
|
|
38621
|
+
settings_local_text_search_caption: "Włącz lokalne wyszukiwanie tekstowe dla wszystkich kolekcji. Pozwoli to na wyszukiwanie pól tekstowych w kolekcjach za pomocą paska wyszukiwania FireCMS. Pamiętaj, że ta funkcja może wiązać się z wyższą liczbą odczytów, ponieważ indeksuje wszystkie pola tekstowe w kolekcjach.",
|
|
38622
|
+
settings_doc_history_all_collections: "Historia dokumentów włączona dla wszystkich kolekcji",
|
|
38623
|
+
settings_doc_history_caption: "Gdy ta opcja jest włączona, wszystkie kolekcje będą miały domyślnie włączoną historię. To ustawienie można zastąpić dla każdej kolekcji osobno. Historia jest zapisywana w podkolekcji __history każdego dokumentu.",
|
|
38624
|
+
settings_theme: "Motyw",
|
|
38625
|
+
settings_primary_color: "Kolor podstawowy",
|
|
38626
|
+
settings_secondary_color: "Kolor dodatkowy",
|
|
38627
|
+
settings_sample_theme_components: "Przykładowe komponenty motywu",
|
|
38628
|
+
settings_drag_drop_logo: "Przeciągnij i upuść tutaj swoje logo",
|
|
38629
|
+
settings_create_subscription: "Utwórz subskrypcję",
|
|
38630
|
+
settings_stripe_disclaimer: "Zostaniesz przekierowany do Stripe, aby dokończyć subskrypcję. Rozliczenie miesięczne na podstawie maksymalnej liczby użytkowników w danym miesiącu. Anuluj w dowolnym momencie – bieżący okres rozliczeniowy jest już opłacony, więc po anulowaniu nie zostaną naliczone żadne dodatkowe opłaty.",
|
|
38631
|
+
settings_subscription_is: "Subskrypcja jest",
|
|
38632
|
+
settings_next_payment_on: "Następna płatność nastąpi {{date}}.",
|
|
38633
|
+
settings_seats_count: "Masz",
|
|
38634
|
+
settings_seat: "miejsce",
|
|
38635
|
+
settings_seats: "miejsc",
|
|
38636
|
+
settings_per_seat: "po {{price}}/miejsce/{{interval}}",
|
|
38637
|
+
settings_current_price: "Aktualna cena to",
|
|
38638
|
+
settings_per_user_usage: "na użytkownika (zależnie od zużycia).",
|
|
38639
|
+
settings_cancelled_active_until: "Ta subskrypcja została anulowana i będzie aktywna do {{date}}.",
|
|
38640
|
+
settings_no_additional_charges: "Po anulowaniu nie zostaną naliczone żadne dodatkowe opłaty.",
|
|
38641
|
+
settings_manage_subscription: "Zarządzaj subskrypcją",
|
|
38642
|
+
settings_security_rules: "Reguły bezpieczeństwa",
|
|
38643
|
+
settings_security_rules_description: "FireCMS wykorzystuje reguły bezpieczeństwa Firebase do ograniczania dostępu do danych. Podczas tworzenia nowego użytkownika za pomocą FireCMS do użytkownika w projekcie klienckim dodawane jest niestandardowe roszczenie fireCMSUser. Dodając poniższe reguły bezpieczeństwa do swojego projektu, zapewniasz użytkownikom FireCMS dostęp do danych za pośrednictwem FireCMS.",
|
|
38644
|
+
settings_security_rules_add_domain: "Pamiętaj, aby dodać domenę {{domain}} do listy dozwolonych domen u swojego dostawcy",
|
|
38645
|
+
settings_security_rules_caption: "Te reguły ograniczają dostęp do danych wyłącznie do użytkowników FireCMS, ale nie wymuszają uprawnień na poziomie bazy danych. Uprawnienia są jednak egzekwowane po stronie frontendu, co w większości projektów sprawdzi się dobrze. Jeśli potrzebujesz wymuszać uprawnienia na poziomie bazy danych, możesz samodzielnie zmodyfikować te reguły bezpieczeństwa według swoich potrzeb. Role przypisane użytkownikowi są ustawiane jako niestandardowe roszczenie w tokenie uwierzytelniania Firebase, więc możesz ich użyć w regułach bezpieczeństwa.",
|
|
38646
|
+
settings_appcheck: "AppCheck",
|
|
38647
|
+
settings_appcheck_description: "Możesz włączyć AppCheck, aby chronić swoje usługi Firebase przed nadużyciami. Sprawdź, jak go skonfigurować, w dokumentacji Firebase. Gdy masz ustawionego dostawcę, możesz go tutaj włączyć. Będziesz musiał podać sekret w ustawieniach projektu Firebase oraz klucz witryny w konfiguracji FireCMS.",
|
|
38648
|
+
settings_appcheck_add_domain: "Pamiętaj, aby dodać domenę {{domain}} do listy dozwolonych domen u swojego dostawcy",
|
|
38649
|
+
settings_appcheck_enable: "Włącz AppCheck",
|
|
38650
|
+
settings_appcheck_site_key: "Klucz witryny",
|
|
38651
|
+
settings_appcheck_update: "Zaktualizuj AppCheck",
|
|
38652
|
+
settings_appcheck_refresh_note: "Po zapisaniu może być konieczne odświeżenie strony, aby zobaczyć zmiany.",
|
|
38653
|
+
settings_appcheck_updated: "AppCheck zaktualizowany",
|
|
38654
|
+
settings_appcheck_error: "Błąd podczas aktualizacji AppCheck",
|
|
38655
|
+
// --- Permission Error View ---
|
|
38656
|
+
missing_firestore_security_rules: "Brak reguł bezpieczeństwa Firestore",
|
|
38657
|
+
firecms_cloud_requires_security_rule: "FireCMS Cloud wymaga określonej reguły bezpieczeństwa w Twoim Firestore, aby przyznać dostęp uwierzytelnionym użytkownikom. Kolekcja",
|
|
38658
|
+
cannot_be_accessed_without_it: "nie może być dostępna bez tej reguły.",
|
|
38659
|
+
required_security_rule: "Wymagana reguła bezpieczeństwa",
|
|
38660
|
+
fix_automatically: "Napraw automatycznie",
|
|
38661
|
+
open_firebase_rules: "Otwórz reguły Firebase",
|
|
38662
|
+
security_rules_updated_successfully: "Reguły bezpieczeństwa zostały pomyślnie zaktualizowane! Odśwież stronę, aby wczytać dane.",
|
|
38663
|
+
sec_rules_fixing: "Naprawianie...",
|
|
38664
|
+
sec_rules_fixed: "Naprawiono!",
|
|
38665
|
+
// ─── GCP Marketplace ─────────────────────────────────────────
|
|
38666
|
+
marketplace_managed_by_gcp: "Zarządzane przez GCP Marketplace",
|
|
38667
|
+
marketplace_billing_note: "Twoja subskrypcja jest zarządzana przez Google Cloud Marketplace. Zmiany planu, rozliczenia i anulowanie są obsługiwane w konsoli GCP.",
|
|
38668
|
+
marketplace_manage_in_gcp_console: "Zarządzaj w konsoli GCP",
|
|
38669
|
+
marketplace_plan_changes_note: "Aby zmienić plan lub anulować subskrypcję, odwiedź swoje zamówienia w GCP Marketplace.",
|
|
38670
|
+
marketplace_welcome_title: "Witamy z GCP Marketplace!",
|
|
38671
|
+
marketplace_welcome_subtitle: "Twoja subskrypcja Google Cloud Marketplace jest aktywna. Wybierz istniejący projekt lub utwórz nowy, aby go połączyć.",
|
|
38672
|
+
marketplace_select_or_create_project: "Wybierz lub utwórz projekt",
|
|
38673
|
+
marketplace_link_project: "Połącz projekt",
|
|
38674
|
+
marketplace_linking: "Łączenie projektu…",
|
|
38675
|
+
marketplace_link_success: "Projekt został pomyślnie połączony! Przekierowywanie…",
|
|
38676
|
+
marketplace_link_error: "Błąd podczas łączenia projektu. Spróbuj ponownie.",
|
|
38677
|
+
marketplace_no_account_id: "Nie znaleziono ID konta GCP Marketplace. Rozpocznij od GCP Marketplace."
|
|
38678
|
+
};
|
|
37444
38679
|
const FIRECMS_NS = "firecms_core";
|
|
37445
38680
|
const FIRECMS_LOCALE_STORAGE_KEY = "firecms_locale";
|
|
37446
38681
|
function FireCMSi18nProvider({
|
|
@@ -37540,6 +38775,11 @@
|
|
|
37540
38775
|
[FIRECMS_NS]: {
|
|
37541
38776
|
...pt
|
|
37542
38777
|
}
|
|
38778
|
+
},
|
|
38779
|
+
pl: {
|
|
38780
|
+
[FIRECMS_NS]: {
|
|
38781
|
+
...pl
|
|
38782
|
+
}
|
|
37543
38783
|
}
|
|
37544
38784
|
};
|
|
37545
38785
|
if (!translations) return resources;
|
|
@@ -42135,6 +43375,7 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
|
|
42135
43375
|
exports2.DrawerLogo = DrawerLogo;
|
|
42136
43376
|
exports2.DrawerNavigationGroup = DrawerNavigationGroup;
|
|
42137
43377
|
exports2.DrawerNavigationItem = DrawerNavigationItem;
|
|
43378
|
+
exports2.DrawerToggle = DrawerToggle;
|
|
42138
43379
|
exports2.EmptyValue = EmptyValue;
|
|
42139
43380
|
exports2.EntityCard = EntityCard;
|
|
42140
43381
|
exports2.EntityCollectionCardView = EntityCollectionCardView;
|
|
@@ -42161,6 +43402,8 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
|
|
42161
43402
|
exports2.FormEntry = FormEntry;
|
|
42162
43403
|
exports2.FormLayout = FormLayout;
|
|
42163
43404
|
exports2.GeoPoint = GeoPoint;
|
|
43405
|
+
exports2.GeopointFieldBinding = GeopointFieldBinding;
|
|
43406
|
+
exports2.GeopointPropertyPreview = GeopointPropertyPreview;
|
|
42164
43407
|
exports2.IconForView = IconForView;
|
|
42165
43408
|
exports2.ImagePreview = ImagePreview;
|
|
42166
43409
|
exports2.InternalUserManagementContext = InternalUserManagementContext;
|
|
@@ -42238,15 +43481,18 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
|
|
42238
43481
|
exports2.canDeleteEntity = canDeleteEntity;
|
|
42239
43482
|
exports2.canEditEntity = canEditEntity;
|
|
42240
43483
|
exports2.copyEntityAction = copyEntityAction;
|
|
43484
|
+
exports2.decodeEntityId = decodeEntityId;
|
|
42241
43485
|
exports2.defaultDateFormat = defaultDateFormat;
|
|
42242
43486
|
exports2.deleteEntityAction = deleteEntityAction;
|
|
42243
43487
|
exports2.deleteEntityWithCallbacks = deleteEntityWithCallbacks;
|
|
42244
43488
|
exports2.editEntityAction = editEntityAction;
|
|
42245
43489
|
exports2.en = en;
|
|
43490
|
+
exports2.encodeEntityId = encodeEntityId;
|
|
42246
43491
|
exports2.enumToObjectEntries = enumToObjectEntries;
|
|
42247
43492
|
exports2.es = es;
|
|
42248
43493
|
exports2.evaluateCondition = evaluateCondition;
|
|
42249
43494
|
exports2.flattenObject = flattenObject;
|
|
43495
|
+
exports2.formatGeoPoint = formatGeoPoint;
|
|
42250
43496
|
exports2.fullPathToCollectionSegments = fullPathToCollectionSegments;
|
|
42251
43497
|
exports2.getArrayResolvedProperties = getArrayResolvedProperties;
|
|
42252
43498
|
exports2.getArrayValuesCount = getArrayValuesCount;
|
|
@@ -42268,6 +43514,7 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
|
|
42268
43514
|
exports2.getFieldConfig = getFieldConfig;
|
|
42269
43515
|
exports2.getFieldId = getFieldId;
|
|
42270
43516
|
exports2.getFormFieldKeys = getFormFieldKeys;
|
|
43517
|
+
exports2.getGeoPointCoordinates = getGeoPointCoordinates;
|
|
42271
43518
|
exports2.getHashValue = getHashValue;
|
|
42272
43519
|
exports2.getIcon = getIcon;
|
|
42273
43520
|
exports2.getIconForProperty = getIconForProperty;
|
|
@@ -42305,6 +43552,8 @@ ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
|
|
42305
43552
|
exports2.mergeDeep = mergeDeep;
|
|
42306
43553
|
exports2.mergeEntityActions = mergeEntityActions;
|
|
42307
43554
|
exports2.navigateToEntity = navigateToEntity;
|
|
43555
|
+
exports2.normalizeGeoPoint = normalizeGeoPoint;
|
|
43556
|
+
exports2.parseGeoPoint = parseGeoPoint;
|
|
42308
43557
|
exports2.pick = pick;
|
|
42309
43558
|
exports2.plural = plural;
|
|
42310
43559
|
exports2.prettifyIdentifier = prettifyIdentifier;
|