@localazy/strapi-plugin 0.1.13-rc.3 → 0.1.13-rc.5

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.
@@ -1,66 +1,26 @@
1
1
  import set from "lodash-es/set";
2
2
  import get from "lodash-es/get";
3
- import uniq from "lodash-es/uniq";
4
- import deepKeys from "@david-vaclavek/deep-keys";
5
- import sortByModelName from "../../@common/utils/sort-by-model-name";
6
- import arrayOfModelsToObject from "../utils/array-of-models-to-object";
7
3
  import findModelValueByKey from "../utils/find-model-value-by-key";
4
+ import getContentTransferSetupKeysSets from "./get-content-transfer-setup-keys-sets";
8
5
 
9
6
  export default (
10
7
  localizableTree = [],
11
8
  storedSetupSchema = [],
12
9
  allModelsTree = []
13
10
  ) => {
14
- localizableTree = arrayOfModelsToObject(
15
- localizableTree.sort(sortByModelName)
16
- );
17
- storedSetupSchema = arrayOfModelsToObject(
18
- storedSetupSchema.sort(sortByModelName)
19
- );
20
-
21
- const unsortedCurrentModelsSchemaKeys = deepKeys(localizableTree);
22
- const unsortedStoredSetupSchemaKeys = deepKeys(storedSetupSchema);
23
- const unsortedAllModelsSchemaKeys = deepKeys(allModelsTree);
24
-
25
- // components order may have changed; this would prevent properties from mixing up
26
- const regex = /\.\d+\.__component__/;
27
- let currentModelsSchemaComponentKeys = unsortedCurrentModelsSchemaKeys.filter((key) => key.match(regex)).map((key) => key.replace(regex, ''));
28
- let storedSetupSchemaComponentKeys = unsortedStoredSetupSchemaKeys.filter((key) => key.match(regex)).map((key) => key.replace(regex, ''));
29
- let allModelsSchemaComponentKeys = unsortedAllModelsSchemaKeys.filter((key) => key.match(regex)).map((key) => key.replace(regex, ''));
30
- currentModelsSchemaComponentKeys = uniq(currentModelsSchemaComponentKeys);
31
- storedSetupSchemaComponentKeys = uniq(storedSetupSchemaComponentKeys);
32
- allModelsSchemaComponentKeys = uniq(allModelsSchemaComponentKeys);
33
-
34
- currentModelsSchemaComponentKeys.forEach((key) => {
35
- get(localizableTree, key).sort((a, b) => a.__component__ > b.__component__ ? 1 : -1);
36
- });
37
-
38
- storedSetupSchemaComponentKeys.forEach((key) => {
39
- get(storedSetupSchema, key).sort((a, b) => a.__component__ > b.__component__ ? 1 : -1);
40
- });
41
-
42
- allModelsSchemaComponentKeys.forEach((key) => {
43
- get(allModelsTree, key).sort((a, b) => a.__component__ > b.__component__ ? 1 : -1);
44
- });
45
-
46
- const currentModelsSchemaKeys = deepKeys(localizableTree);
47
- const storedSetupSchemaKeys = deepKeys(storedSetupSchema);
48
-
49
- const removedKeys = storedSetupSchemaKeys.filter(
50
- (x) => !currentModelsSchemaKeys.includes(x)
51
- );
52
-
53
- const newKeys = currentModelsSchemaKeys.filter(
54
- (key) => !storedSetupSchemaKeys.includes(key)
55
- );
56
-
57
- const filteredStoredSetupSchemaKeys = storedSetupSchemaKeys.filter(
58
- (key) => !removedKeys.includes(key)
11
+ const {
12
+ oLocalizableTree,
13
+ oStoredSetupSchema,
14
+ newKeys,
15
+ filteredStoredSetupSchemaKeys
16
+ } = getContentTransferSetupKeysSets(
17
+ localizableTree,
18
+ storedSetupSchema,
59
19
  );
60
20
 
61
21
  const destinationObject = {};
62
22
  filteredStoredSetupSchemaKeys.forEach((key) => {
63
- const localizableTreeValueToSet = get(storedSetupSchema, key);
23
+ const localizableTreeValueToSet = get(oStoredSetupSchema, key);
64
24
  const allModelsTreeValueToSet = findModelValueByKey(allModelsTree, key);
65
25
 
66
26
  if (allModelsTreeValueToSet === null) {
@@ -74,7 +34,7 @@ export default (
74
34
  }
75
35
  });
76
36
  newKeys.forEach((key) => {
77
- set(destinationObject, key, get(localizableTree, key));
37
+ set(destinationObject, key, get(oLocalizableTree, key));
78
38
  });
79
39
 
80
40
  const destinationArray = [];
@@ -0,0 +1,85 @@
1
+ import get from "lodash-es/get";
2
+ import uniq from "lodash-es/uniq";
3
+ import deepKeys from "@david-vaclavek/deep-keys";
4
+ import sortByModelName from "../../@common/utils/sort-by-model-name";
5
+ import arrayOfModelsToObject from "../utils/array-of-models-to-object";
6
+
7
+ export default (
8
+ localizableTree = [],
9
+ storedSetupSchema = [],
10
+ ) => {
11
+ localizableTree = arrayOfModelsToObject(
12
+ localizableTree.sort(sortByModelName)
13
+ );
14
+ storedSetupSchema = arrayOfModelsToObject(
15
+ storedSetupSchema.sort(sortByModelName)
16
+ );
17
+
18
+ const currentModelsSchemaKeys = deepKeys(localizableTree);
19
+ const storedSetupSchemaKeys = deepKeys(storedSetupSchema);
20
+
21
+ // components order may have changed; this would prevent properties from mixing up
22
+ const regex = /\.\d+\.__component__/;
23
+ let currentModelsSchemaComponentKeys = currentModelsSchemaKeys.filter((key) => key.match(regex)).map((key) => key.replace(regex, ''));
24
+ let storedSetupSchemaComponentKeys = storedSetupSchemaKeys.filter((key) => key.match(regex)).map((key) => key.replace(regex, ''));
25
+ currentModelsSchemaComponentKeys = uniq(currentModelsSchemaComponentKeys);
26
+ storedSetupSchemaComponentKeys = uniq(storedSetupSchemaComponentKeys);
27
+
28
+ const currentModelsSchemaComponentKeysComponentProp = currentModelsSchemaKeys.filter((key) => key.includes('__component__') && currentModelsSchemaComponentKeys.some((k) => key.includes(k)));
29
+ const storedSetupSchemaComponentKeysComponentProp = storedSetupSchemaKeys.filter((key) => key.includes('__component__') && storedSetupSchemaComponentKeys.some((k) => key.includes(k)));
30
+
31
+ /**
32
+ * Is in the "stored setup schema" but not in the "current model"
33
+ */
34
+ let removedKeys = [];
35
+ removedKeys.push(...storedSetupSchemaComponentKeysComponentProp.map((key) => {
36
+ const storedComponentName = get(storedSetupSchema, key);
37
+ const currentComponentName = get(localizableTree, key);
38
+
39
+ // this must return an array of keys
40
+ if (storedComponentName !== currentComponentName) {
41
+ const part = key.split('.').slice(0, -1).join('.');
42
+
43
+ return storedSetupSchemaKeys.filter((k) => k.includes(part));
44
+ }
45
+
46
+ return [];
47
+ }).reduce((acc, val) => acc.concat(val), []));
48
+ removedKeys.push(...storedSetupSchemaKeys.filter((key) => !currentModelsSchemaKeys.includes(key)));
49
+ removedKeys = uniq(removedKeys);
50
+
51
+ /**
52
+ * Is in the "current model" but not in the "stored setup schema"
53
+ */
54
+ let newKeys = [];
55
+ newKeys.push(...currentModelsSchemaComponentKeysComponentProp.map((key) => {
56
+ const storedComponentName = get(storedSetupSchema, key);
57
+ const currentComponentName = get(localizableTree, key);
58
+
59
+ // this must return an array of keys
60
+ if (storedComponentName !== currentComponentName) {
61
+ const part = key.split('.').slice(0, -1).join('.');
62
+
63
+ return currentModelsSchemaKeys.filter((k) => k.includes(part));
64
+ }
65
+
66
+ return [];
67
+ }).reduce((acc, val) => acc.concat(val), []));
68
+ newKeys.push(...currentModelsSchemaKeys.filter((key) => !storedSetupSchemaKeys.includes(key)));
69
+ newKeys = uniq(newKeys);
70
+
71
+ /**
72
+ * Filter out the removed keys
73
+ */
74
+ const filteredStoredSetupSchemaKeys = storedSetupSchemaKeys.filter(
75
+ (key) => !removedKeys.includes(key)
76
+ );
77
+
78
+ return {
79
+ oLocalizableTree: localizableTree,
80
+ oStoredSetupSchema: storedSetupSchema,
81
+ removedKeys,
82
+ newKeys,
83
+ filteredStoredSetupSchemaKeys,
84
+ }
85
+ }
@@ -1,12 +1,9 @@
1
- import deepKeys from "@david-vaclavek/deep-keys";
2
1
  import get from "lodash-es/get";
3
- import uniq from "lodash-es/uniq";
4
2
  import PluginSettingsService from "../services/plugin-settings-service";
5
3
  import StrapiModelService from "../services/strapi-model-service";
6
4
  import getModelsTree from "../utils/get-models-tree";
7
- import sortByModelName from "../../@common/utils/sort-by-model-name";
8
- import arrayOfModelsToObject from "../utils/array-of-models-to-object";
9
5
  import findModelValueByKey from "../utils/find-model-value-by-key";
6
+ import getContentTransferSetupKeysSets from "./get-content-transfer-setup-keys-sets";
10
7
 
11
8
  /**
12
9
  * Pass parameters optionally so we don't have to fetch them again
@@ -37,53 +34,26 @@ export default async (
37
34
  allModelsTree = getModelsTree(models, models);
38
35
  }
39
36
 
40
- localizableTree = arrayOfModelsToObject(
41
- localizableTree.sort(sortByModelName)
42
- );
43
- storedSetupSchema = arrayOfModelsToObject(
44
- storedSetupSchema.sort(sortByModelName)
45
- );
46
-
47
- const currentModelsSchemaKeys = deepKeys(localizableTree);
48
- const unsortedStoredSetupSchemaKeys = deepKeys(storedSetupSchema);
49
-
50
- // components order may have changed; this would prevent properties from mixing up
51
- const regex = /\.\d+\.__component__/;
52
- let currentModelsSchemaComponentKeys = currentModelsSchemaKeys.filter((key) => key.match(regex)).map((key) => key.replace(regex, ''));
53
- let storedSetupSchemaComponentKeys = unsortedStoredSetupSchemaKeys.filter((key) => key.match(regex)).map((key) => key.replace(regex, ''));
54
- currentModelsSchemaComponentKeys = uniq(currentModelsSchemaComponentKeys);
55
- storedSetupSchemaComponentKeys = uniq(storedSetupSchemaComponentKeys);
56
-
57
- currentModelsSchemaComponentKeys.forEach((key) => {
58
- get(localizableTree, key).sort((a, b) => a.__component__ > b.__component__ ? 1 : -1);
59
- });
60
-
61
- storedSetupSchemaComponentKeys.forEach((key) => {
62
- get(storedSetupSchema, key).sort((a, b) => a.__component__ > b.__component__ ? 1 : -1);
63
- });
64
-
65
- const modelsTreeKeys = deepKeys(localizableTree);
66
- const storedSetupSchemaKeys = deepKeys(storedSetupSchema);
67
-
68
-
69
- const removedKeys = storedSetupSchemaKeys.filter(
70
- (x) => !modelsTreeKeys.includes(x)
71
- );
72
- const newKeys = modelsTreeKeys.filter(
73
- (key) => !storedSetupSchemaKeys.includes(key)
37
+ const {
38
+ oStoredSetupSchema,
39
+ removedKeys,
40
+ newKeys,
41
+ filteredStoredSetupSchemaKeys
42
+ } = getContentTransferSetupKeysSets(
43
+ localizableTree,
44
+ storedSetupSchema,
74
45
  );
75
46
 
76
47
  if (newKeys.length || removedKeys.length) {
77
48
  return true;
78
49
  }
79
50
 
80
- const filteredStoredSetupSchemaKeys = storedSetupSchemaKeys.filter(
81
- (key) => !removedKeys.includes(key)
82
- );
83
-
51
+ /**
52
+ * Check if the values are different (type might have changed; boolean to null or vice versa)
53
+ */
84
54
  // eslint-disable-next-line no-restricted-syntax
85
55
  for (const key of filteredStoredSetupSchemaKeys) {
86
- const localizableTreeValueToSet = get(storedSetupSchema, key);
56
+ const localizableTreeValueToSet = get(oStoredSetupSchema, key);
87
57
  const allModelsTreeValueToSet = findModelValueByKey(allModelsTree, key);
88
58
 
89
59
  if (
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@localazy/strapi-plugin",
3
- "version": "0.1.13-rc.3",
3
+ "version": "0.1.13-rc.5",
4
4
  "description": "The official Strapi Plugin by Localazy.",
5
5
  "strapi": {
6
6
  "name": "localazy",
@@ -12,8 +12,16 @@ const isDynamicZoneKey = (key, transferSetupModel) => {
12
12
  }
13
13
 
14
14
  const dynamicPropertyEntryIdWithSquareBrackets = matches[1];
15
- const dynamicPropertyNamePart = key.split(".").find((s, index) => index > 1 && s.includes(dynamicPropertyEntryIdWithSquareBrackets));
16
- const dynamicPropertyName = dynamicPropertyNamePart.replace(dynamicPropertyEntryIdWithSquareBrackets, "");
15
+ const dynamicPropertyNamePart = key
16
+ .split(".")
17
+ .find(
18
+ (s, index) =>
19
+ index > 1 && s.includes(dynamicPropertyEntryIdWithSquareBrackets)
20
+ );
21
+ const dynamicPropertyName = dynamicPropertyNamePart.replace(
22
+ dynamicPropertyEntryIdWithSquareBrackets,
23
+ ""
24
+ );
17
25
 
18
26
  return Array.isArray(transferSetupModel[dynamicPropertyName]);
19
27
  };
@@ -25,19 +33,31 @@ const getDynamicZoneEntryId = (key, transferSetupModel) => {
25
33
 
26
34
  const matches = key.match(/\[\d+\]+/g);
27
35
  // remove square brackets
28
- const id = matches[1].replace(/[\[\]']+/g, '');
36
+ const id = matches[1].replace(/[\[\]']+/g, "");
29
37
  return id;
30
- }
38
+ };
39
+
40
+ const getUniqueDynamicZoneEntryId = (key, transferSetupModel) => {
41
+ if (!isDynamicZoneKey(key, transferSetupModel)) {
42
+ return undefined;
43
+ }
44
+
45
+ const keySplittedByDot = key.split(".");
46
+
47
+ return keySplittedByDot[2];
48
+ };
31
49
 
32
50
  const doesPickPathsIncludeTheComponent = (pickPaths, dzParameterKey) => {
33
51
  return pickPaths.some((pp) => pp.includes(dzParameterKey));
34
- }
52
+ };
35
53
 
36
54
  const pickEntries = (flatten, pickPaths, transferSetupModel) => {
37
55
  // * dynamic zones properties must! always be in 1st level (not in component; Strapi restrictions)
38
56
 
39
57
  const dzEntryIdComponentMap = {};
40
- const flattenComponentProps = Object.fromEntries(Object.entries(flatten).filter(([key]) => key.includes('__component')));
58
+ const flattenComponentProps = Object.fromEntries(
59
+ Object.entries(flatten).filter(([key]) => key.includes("__component"))
60
+ );
41
61
 
42
62
  const pickedDeep = pickDeep(transferSetupModel, ["__component__"]);
43
63
  const flattenedPickedDeep = flattenObject(pickedDeep);
@@ -52,25 +72,41 @@ const pickEntries = (flatten, pickPaths, transferSetupModel) => {
52
72
  return;
53
73
  }
54
74
 
55
- const entryId = getDynamicZoneEntryId(key, transferSetupModel);
56
- dzEntryIdComponentMap[entryId] = {
75
+ const keySplittedByDot = key.replace(".__component", "").split(".");
76
+ const componentName = keySplittedByDot[keySplittedByDot.length - 1].replace(
77
+ /\[.*\]/g,
78
+ ""
79
+ );
80
+ const uniqueEntryId = getUniqueDynamicZoneEntryId(key, transferSetupModel);
81
+
82
+ const keyOfEntry = Object.keys(flattenedPickedDeep)
83
+ .filter((fpdk) => fpdk.replace(/\[.*\]/g, "") == componentName)
84
+ .find((fpdk) => flattenedPickedDeep[fpdk] === flattenComponentProps[key]);
85
+ dzEntryIdComponentMap[uniqueEntryId] = {
57
86
  component: flattenComponentProps[key],
58
- key: Object.keys(flattenedPickedDeep).find((fpdk) => flattenedPickedDeep[fpdk] === flattenComponentProps[key]),
87
+ key: keyOfEntry,
59
88
  };
60
89
  });
61
90
 
62
91
  const pickedEntries = {};
63
- const mappedPickPaths = pickPaths.map((pickPath) => pickPath.replace(/\[\d+\]/g, ""));
92
+ const mappedPickPaths = pickPaths.map((pickPath) =>
93
+ pickPath.replace(/\[\d+\]/g, "")
94
+ );
64
95
 
65
96
  // filter out "__component"
66
- const filteredFlatten = Object.fromEntries(Object.entries(flatten).filter(([key]) => !key.includes('__component')));
97
+ const filteredFlatten = Object.fromEntries(
98
+ Object.entries(flatten).filter(([key]) => !key.includes("__component"))
99
+ );
67
100
  Object.keys(filteredFlatten).forEach((key) => {
68
101
  // decide whether it is a dynamic zone
69
102
  // handle dynamic zones, in case of similarly-named fields across more components
70
103
  const isDynamicZone = isDynamicZoneKey(key, transferSetupModel);
71
104
  if (isDynamicZone) {
72
- const dzEntryId = getDynamicZoneEntryId(key, transferSetupModel);
73
- const dzParameterKey = dzEntryIdComponentMap[dzEntryId].key;
105
+ const uniqueDzEntryId = getUniqueDynamicZoneEntryId(
106
+ key,
107
+ transferSetupModel
108
+ );
109
+ const dzParameterKey = dzEntryIdComponentMap[uniqueDzEntryId].key;
74
110
 
75
111
  if (!doesPickPathsIncludeTheComponent(pickPaths, dzParameterKey)) {
76
112
  return;
@@ -81,11 +117,19 @@ const pickEntries = (flatten, pickPaths, transferSetupModel) => {
81
117
  if (mappedPickPaths.includes(filteredKey)) {
82
118
  if (isDynamicZone) {
83
119
  const dzEntryId = getDynamicZoneEntryId(key, transferSetupModel);
84
- const dzParameterKey = dzEntryIdComponentMap[dzEntryId].key;
85
-
86
- const dzParameterName = dzParameterKey.substring(0, dzParameterKey.indexOf('['));
120
+ const uniqueDzEntryId = getUniqueDynamicZoneEntryId(
121
+ key,
122
+ transferSetupModel
123
+ );
124
+ const dzParameterKey = dzEntryIdComponentMap[uniqueDzEntryId].key;
125
+
126
+ const dzParameterName = dzParameterKey.substring(
127
+ 0,
128
+ dzParameterKey.indexOf("[")
129
+ );
87
130
  const toBeReplaced = `${dzParameterName}[${dzEntryId}]`;
88
- const dzParameterComponent = dzEntryIdComponentMap[dzEntryId].component;
131
+ const dzParameterComponent =
132
+ dzEntryIdComponentMap[uniqueDzEntryId].component;
89
133
  const componentAddition = `${dzParameterName}[${dzEntryId};${dzParameterComponent}]`;
90
134
  const replacedKey = key.replace(toBeReplaced, componentAddition);
91
135
  pickedEntries[replacedKey] = flatten[key];