@csbeker/medusa-product-attributes 2.2.0 → 2.3.0
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/.medusa/server/src/admin/index.js +25 -7
- package/.medusa/server/src/admin/index.mjs +25 -7
- package/.medusa/server/src/api/admin/plugin/attribute-set/[id]/route.js +7 -2
- package/.medusa/server/src/api/admin/plugin/attribute-set/route.js +7 -2
- package/.medusa/server/src/api/admin/plugin/attributes/[id]/route.js +11 -4
- package/.medusa/server/src/api/admin/plugin/attributes/[id]/values/[valueId]/route.js +7 -2
- package/.medusa/server/src/api/admin/plugin/attributes/[id]/values/route.js +7 -2
- package/.medusa/server/src/api/admin/plugin/attributes/route.js +7 -2
- package/.medusa/server/src/modules/attribute/migrations/Migration20250612192858.js +16 -0
- package/.medusa/server/src/modules/attribute/types/attribute/common.js +2 -1
- package/CHANGELOG.md +2 -0
- package/package.json +25 -25
- package/src/admin/routes/attributes/components/AttributeForm.tsx +16 -4
- package/src/admin/routes/attributes/create/page.tsx +2 -2
- package/src/api/admin/plugin/attribute-set/[id]/route.ts +7 -7
- package/src/api/admin/plugin/attribute-set/route.ts +8 -8
- package/src/api/admin/plugin/attributes/[id]/route.ts +13 -11
- package/src/api/admin/plugin/attributes/[id]/values/[valueId]/route.ts +6 -1
- package/src/api/admin/plugin/attributes/[id]/values/route.ts +6 -6
- package/src/api/admin/plugin/attributes/route.ts +7 -7
- package/src/modules/attribute/migrations/Migration20250612192858.ts +17 -0
- package/src/modules/attribute/types/attribute/common.ts +3 -2
|
@@ -4099,6 +4099,7 @@ var AttributeUIComponent = /* @__PURE__ */ ((AttributeUIComponent2) => {
|
|
|
4099
4099
|
AttributeUIComponent2["TOGGLE"] = "toggle";
|
|
4100
4100
|
AttributeUIComponent2["TEXTAREA"] = "text_area";
|
|
4101
4101
|
AttributeUIComponent2["COLOR_PICKER"] = "color_picker";
|
|
4102
|
+
AttributeUIComponent2["REPEATER"] = "repeater";
|
|
4102
4103
|
return AttributeUIComponent2;
|
|
4103
4104
|
})(AttributeUIComponent || {});
|
|
4104
4105
|
var util;
|
|
@@ -8130,14 +8131,23 @@ const AttributeForm = ({
|
|
|
8130
8131
|
),
|
|
8131
8132
|
children: [
|
|
8132
8133
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Select.Trigger, { className: "mt-1", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Value, { placeholder: "Select Type" }) }),
|
|
8133
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8134
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.Select.Content, { children: [
|
|
8135
|
+
Object.values(AttributeUIComponent).map((component) => /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: component, children: component === "select" ? "Single Select" : component === "multivalue" ? "Multi Select" : component === "unit" ? "Unit" : component === "toggle" ? "Toggle" : component === "text_area" ? "Text" : component === "color_picker" ? "Color Picker" : component === "repeater" ? "Repeater (Array de objetos)" : component }, component)),
|
|
8136
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: "custom-manual", children: "Opción agregada a mano" }, "custom-manual")
|
|
8137
|
+
] })
|
|
8134
8138
|
]
|
|
8135
8139
|
}
|
|
8136
8140
|
),
|
|
8137
8141
|
form.formState.errors.ui_component && /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-red-500 text-sm mt-1", children: form.formState.errors.ui_component.message })
|
|
8138
8142
|
] }),
|
|
8139
|
-
form.watch("ui_component") === AttributeUIComponent.SELECT && /* @__PURE__ */ jsxRuntime.jsx(ui.InlineTip, { label: "Tip", variant: "info", children: "When creating Single Select buyers will be able to choose only one value. This type of attribute will be good for product specifications." }),
|
|
8140
|
-
(form.watch("ui_component") === AttributeUIComponent.SELECT || form.watch("ui_component") === AttributeUIComponent.MULTIVALUE) && /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(PossibleValuesList, {}) })
|
|
8143
|
+
form.watch("ui_component") === AttributeUIComponent.SELECT && /* @__PURE__ */ jsxRuntime.jsx(ui.InlineTip, { label: "Tip", variant: "info", children: "When creating Single Select buyers - se cambio ultimaaa vez - will be able to choose only one value. This type of attribute will be good for product specifications." }),
|
|
8144
|
+
(form.watch("ui_component") === AttributeUIComponent.SELECT || form.watch("ui_component") === AttributeUIComponent.MULTIVALUE) && /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(PossibleValuesList, {}) }),
|
|
8145
|
+
form.watch("ui_component") === AttributeUIComponent.REPEATER && /* @__PURE__ */ jsxRuntime.jsxs(ui.InlineTip, { label: "Tip", variant: "info", children: [
|
|
8146
|
+
"El tipo ",
|
|
8147
|
+
/* @__PURE__ */ jsxRuntime.jsx("b", { children: "Repeater" }),
|
|
8148
|
+
" permite guardar un array de objetos serializado como string en el campo value. Ejemplo: ",
|
|
8149
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { children: `[{"label": "Color", "value": "Rojo"}]` })
|
|
8150
|
+
] })
|
|
8141
8151
|
] });
|
|
8142
8152
|
return /* @__PURE__ */ jsxRuntime.jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: "attribute-form", onSubmit: handleSubmit, children: [
|
|
8143
8153
|
activeTab === "details" && renderDetailsTab(),
|
|
@@ -8982,19 +8992,25 @@ const menuItemModule = {
|
|
|
8982
8992
|
label: config$2.label,
|
|
8983
8993
|
icon: config$2.icon,
|
|
8984
8994
|
path: "/attributes",
|
|
8985
|
-
nested: void 0
|
|
8995
|
+
nested: void 0,
|
|
8996
|
+
rank: void 0,
|
|
8997
|
+
translationNs: void 0
|
|
8986
8998
|
},
|
|
8987
8999
|
{
|
|
8988
9000
|
label: config$1.label,
|
|
8989
9001
|
icon: void 0,
|
|
8990
9002
|
path: "/attributes/:id",
|
|
8991
|
-
nested: void 0
|
|
9003
|
+
nested: void 0,
|
|
9004
|
+
rank: void 0,
|
|
9005
|
+
translationNs: void 0
|
|
8992
9006
|
},
|
|
8993
9007
|
{
|
|
8994
9008
|
label: config.label,
|
|
8995
9009
|
icon: void 0,
|
|
8996
9010
|
path: "/attributes/:id/edit",
|
|
8997
|
-
nested: void 0
|
|
9011
|
+
nested: void 0,
|
|
9012
|
+
rank: void 0,
|
|
9013
|
+
translationNs: void 0
|
|
8998
9014
|
}
|
|
8999
9015
|
]
|
|
9000
9016
|
};
|
|
@@ -9002,11 +9018,13 @@ const formModule = { customFields: {} };
|
|
|
9002
9018
|
const displayModule = {
|
|
9003
9019
|
displays: {}
|
|
9004
9020
|
};
|
|
9021
|
+
const i18nModule = { resources: {} };
|
|
9005
9022
|
const plugin = {
|
|
9006
9023
|
widgetModule,
|
|
9007
9024
|
routeModule,
|
|
9008
9025
|
menuItemModule,
|
|
9009
9026
|
formModule,
|
|
9010
|
-
displayModule
|
|
9027
|
+
displayModule,
|
|
9028
|
+
i18nModule
|
|
9011
9029
|
};
|
|
9012
9030
|
module.exports = plugin;
|
|
@@ -4095,6 +4095,7 @@ var AttributeUIComponent = /* @__PURE__ */ ((AttributeUIComponent2) => {
|
|
|
4095
4095
|
AttributeUIComponent2["TOGGLE"] = "toggle";
|
|
4096
4096
|
AttributeUIComponent2["TEXTAREA"] = "text_area";
|
|
4097
4097
|
AttributeUIComponent2["COLOR_PICKER"] = "color_picker";
|
|
4098
|
+
AttributeUIComponent2["REPEATER"] = "repeater";
|
|
4098
4099
|
return AttributeUIComponent2;
|
|
4099
4100
|
})(AttributeUIComponent || {});
|
|
4100
4101
|
var util;
|
|
@@ -8126,14 +8127,23 @@ const AttributeForm = ({
|
|
|
8126
8127
|
),
|
|
8127
8128
|
children: [
|
|
8128
8129
|
/* @__PURE__ */ jsx(Select.Trigger, { className: "mt-1", children: /* @__PURE__ */ jsx(Select.Value, { placeholder: "Select Type" }) }),
|
|
8129
|
-
/* @__PURE__ */
|
|
8130
|
+
/* @__PURE__ */ jsxs(Select.Content, { children: [
|
|
8131
|
+
Object.values(AttributeUIComponent).map((component) => /* @__PURE__ */ jsx(Select.Item, { value: component, children: component === "select" ? "Single Select" : component === "multivalue" ? "Multi Select" : component === "unit" ? "Unit" : component === "toggle" ? "Toggle" : component === "text_area" ? "Text" : component === "color_picker" ? "Color Picker" : component === "repeater" ? "Repeater (Array de objetos)" : component }, component)),
|
|
8132
|
+
/* @__PURE__ */ jsx(Select.Item, { value: "custom-manual", children: "Opción agregada a mano" }, "custom-manual")
|
|
8133
|
+
] })
|
|
8130
8134
|
]
|
|
8131
8135
|
}
|
|
8132
8136
|
),
|
|
8133
8137
|
form.formState.errors.ui_component && /* @__PURE__ */ jsx(Text, { className: "text-red-500 text-sm mt-1", children: form.formState.errors.ui_component.message })
|
|
8134
8138
|
] }),
|
|
8135
|
-
form.watch("ui_component") === AttributeUIComponent.SELECT && /* @__PURE__ */ jsx(InlineTip, { label: "Tip", variant: "info", children: "When creating Single Select buyers will be able to choose only one value. This type of attribute will be good for product specifications." }),
|
|
8136
|
-
(form.watch("ui_component") === AttributeUIComponent.SELECT || form.watch("ui_component") === AttributeUIComponent.MULTIVALUE) && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(PossibleValuesList, {}) })
|
|
8139
|
+
form.watch("ui_component") === AttributeUIComponent.SELECT && /* @__PURE__ */ jsx(InlineTip, { label: "Tip", variant: "info", children: "When creating Single Select buyers - se cambio ultimaaa vez - will be able to choose only one value. This type of attribute will be good for product specifications." }),
|
|
8140
|
+
(form.watch("ui_component") === AttributeUIComponent.SELECT || form.watch("ui_component") === AttributeUIComponent.MULTIVALUE) && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(PossibleValuesList, {}) }),
|
|
8141
|
+
form.watch("ui_component") === AttributeUIComponent.REPEATER && /* @__PURE__ */ jsxs(InlineTip, { label: "Tip", variant: "info", children: [
|
|
8142
|
+
"El tipo ",
|
|
8143
|
+
/* @__PURE__ */ jsx("b", { children: "Repeater" }),
|
|
8144
|
+
" permite guardar un array de objetos serializado como string en el campo value. Ejemplo: ",
|
|
8145
|
+
/* @__PURE__ */ jsx("code", { children: `[{"label": "Color", "value": "Rojo"}]` })
|
|
8146
|
+
] })
|
|
8137
8147
|
] });
|
|
8138
8148
|
return /* @__PURE__ */ jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsxs("form", { id: "attribute-form", onSubmit: handleSubmit, children: [
|
|
8139
8149
|
activeTab === "details" && renderDetailsTab(),
|
|
@@ -8978,19 +8988,25 @@ const menuItemModule = {
|
|
|
8978
8988
|
label: config$2.label,
|
|
8979
8989
|
icon: config$2.icon,
|
|
8980
8990
|
path: "/attributes",
|
|
8981
|
-
nested: void 0
|
|
8991
|
+
nested: void 0,
|
|
8992
|
+
rank: void 0,
|
|
8993
|
+
translationNs: void 0
|
|
8982
8994
|
},
|
|
8983
8995
|
{
|
|
8984
8996
|
label: config$1.label,
|
|
8985
8997
|
icon: void 0,
|
|
8986
8998
|
path: "/attributes/:id",
|
|
8987
|
-
nested: void 0
|
|
8999
|
+
nested: void 0,
|
|
9000
|
+
rank: void 0,
|
|
9001
|
+
translationNs: void 0
|
|
8988
9002
|
},
|
|
8989
9003
|
{
|
|
8990
9004
|
label: config.label,
|
|
8991
9005
|
icon: void 0,
|
|
8992
9006
|
path: "/attributes/:id/edit",
|
|
8993
|
-
nested: void 0
|
|
9007
|
+
nested: void 0,
|
|
9008
|
+
rank: void 0,
|
|
9009
|
+
translationNs: void 0
|
|
8994
9010
|
}
|
|
8995
9011
|
]
|
|
8996
9012
|
};
|
|
@@ -8998,12 +9014,14 @@ const formModule = { customFields: {} };
|
|
|
8998
9014
|
const displayModule = {
|
|
8999
9015
|
displays: {}
|
|
9000
9016
|
};
|
|
9017
|
+
const i18nModule = { resources: {} };
|
|
9001
9018
|
const plugin = {
|
|
9002
9019
|
widgetModule,
|
|
9003
9020
|
routeModule,
|
|
9004
9021
|
menuItemModule,
|
|
9005
9022
|
formModule,
|
|
9006
|
-
displayModule
|
|
9023
|
+
displayModule,
|
|
9024
|
+
i18nModule
|
|
9007
9025
|
};
|
|
9008
9026
|
export {
|
|
9009
9027
|
plugin as default
|
|
@@ -26,8 +26,13 @@ const POST = async (req, res) => {
|
|
|
26
26
|
id,
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
|
-
const attributeSet = await (0, framework_1.refetchEntity)(
|
|
29
|
+
const attributeSet = await (0, framework_1.refetchEntity)({
|
|
30
|
+
entity: 'attribute_set',
|
|
31
|
+
idOrFilter: id,
|
|
32
|
+
scope: req.scope,
|
|
33
|
+
fields: req.queryConfig.fields,
|
|
34
|
+
});
|
|
30
35
|
return res.status(200).json({ attributeSet });
|
|
31
36
|
};
|
|
32
37
|
exports.POST = POST;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9hdHRyaWJ1dGUtc2V0L1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQW1GO0FBRW5GLHFEQUFzRTtBQUN0RSxnRkFBOEY7QUFHdkYsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQStDLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQzlGLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO0lBQ3hCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRWhFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMvQyxNQUFNLEVBQUUsZUFBZTtRQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDZixHQUFHLEdBQUcsQ0FBQyxXQUFXO0tBQ3JCLEVBQUU7UUFDQyxrQkFBa0IsRUFBRSxJQUFJO0tBQzNCLENBQUMsQ0FBQTtJQUVGLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO0FBQ2pELENBQUMsQ0FBQTtBQWJZLFFBQUEsR0FBRyxPQWFmO0FBRU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQStDLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQy9GLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO0lBQ3hCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUE7SUFFOUIsTUFBTSxJQUFBLHNDQUEwQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDNUMsS0FBSyxFQUFFO1lBQ0gsR0FBRyxJQUFJO1lBQ1AsRUFBRTtTQUNMO0tBQ0osQ0FBQyxDQUFBO0lBRUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLHlCQUFhLEVBQUM7UUFDckMsTUFBTSxFQUFFLGVBQWU7UUFDdkIsVUFBVSxFQUFFLEVBQUU7UUFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtLQUNqQyxDQUFDLENBQUE7SUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTtBQUNqRCxDQUFDLENBQUE7QUFuQlksUUFBQSxJQUFJLFFBbUJoQiJ9
|
|
@@ -8,7 +8,12 @@ const POST = async (req, res) => {
|
|
|
8
8
|
const { result: [attributeSet] } = await (0, create_attribute_set_1.createAttributeSetWorkflow)(req.scope).run({
|
|
9
9
|
input: [req.validatedBody]
|
|
10
10
|
});
|
|
11
|
-
const response = await (0, framework_1.refetchEntity)(
|
|
11
|
+
const response = await (0, framework_1.refetchEntity)({
|
|
12
|
+
entity: 'attribute_set',
|
|
13
|
+
idOrFilter: attributeSet.id,
|
|
14
|
+
scope: req.scope,
|
|
15
|
+
fields: req.queryConfig.fields,
|
|
16
|
+
});
|
|
12
17
|
return res.status(201).json({ attribute_set: response });
|
|
13
18
|
};
|
|
14
19
|
exports.POST = POST;
|
|
@@ -22,4 +27,4 @@ const GET = async (req, res) => {
|
|
|
22
27
|
return res.status(200).json({ attributeSets, count: metadata?.count, offset: metadata?.skip, limit: metadata?.take });
|
|
23
28
|
};
|
|
24
29
|
exports.GET = GET;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9hdHRyaWJ1dGUtc2V0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFtRjtBQUduRiw2R0FBZ0g7QUFDaEgscURBQXNFO0FBSS9ELE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUErQyxFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUMvRixNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUEsaURBQTBCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0tBQzdCLENBQUMsQ0FBQTtJQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSx5QkFBYSxFQUFDO1FBQ2pDLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLFVBQVUsRUFBRSxZQUFZLENBQUMsRUFBRTtRQUMzQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtLQUNqQyxDQUFDLENBQUE7SUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFDNUQsQ0FBQyxDQUFBO0FBYlksUUFBQSxJQUFJLFFBYWhCO0FBRU0sTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQW9ELEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25HLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRWhFLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN4RCxNQUFNLEVBQUUsZUFBZTtRQUN2QixPQUFPLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjtRQUM3QixHQUFHLEdBQUcsQ0FBQyxXQUFXO0tBQ3JCLENBQUMsQ0FBQTtJQUVGLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ3pILENBQUMsQ0FBQTtBQVZZLFFBQUEsR0FBRyxPQVVmIn0=
|
|
@@ -19,12 +19,19 @@ const POST = async (req, res) => {
|
|
|
19
19
|
throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.NOT_FOUND, `Attribute with id '${attributeId}' not found`);
|
|
20
20
|
}
|
|
21
21
|
await (0, workflows_1.updateAttributesWorkflow)(req.scope).run({
|
|
22
|
-
input: {
|
|
22
|
+
input: {
|
|
23
|
+
attributes: [{
|
|
23
24
|
...req.validatedBody,
|
|
24
25
|
id: attributeId
|
|
25
|
-
}]
|
|
26
|
+
}]
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
const attribute = await (0, framework_1.refetchEntities)({
|
|
30
|
+
entity: 'attribute',
|
|
31
|
+
idOrFilter: attributeId,
|
|
32
|
+
scope: req.scope,
|
|
33
|
+
fields: req.queryConfig.fields
|
|
26
34
|
});
|
|
27
|
-
const attribute = await (0, framework_1.refetchEntities)('attribute', attributeId, req.scope, req.queryConfig.fields);
|
|
28
35
|
return res.status(201).json({ attribute });
|
|
29
36
|
};
|
|
30
37
|
exports.POST = POST;
|
|
@@ -65,4 +72,4 @@ const DELETE = async (req, res) => {
|
|
|
65
72
|
return res.status(200).json({});
|
|
66
73
|
};
|
|
67
74
|
exports.DELETE = DELETE;
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9hdHRyaWJ1dGVzL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXFGO0FBRXJGLHFEQUFxRztBQUNyRyx3REFBb0U7QUFFcEUsb0dBQXdHO0FBRWpHLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFzQyxFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUN0RixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtJQUVqQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwRCxNQUFNLEVBQUUsV0FBVztRQUNuQixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDZCxPQUFPLEVBQUU7WUFDTCxFQUFFLEVBQUUsV0FBVztTQUNsQjtLQUNKLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxtQkFBVyxDQUFDLHdCQUFnQixDQUFDLFNBQVMsRUFBRSxzQkFBc0IsV0FBVyxhQUFhLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBRUQsTUFBTSxJQUFBLG9DQUF3QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDMUMsS0FBSyxFQUFFO1lBQ0gsVUFBVSxFQUFFLENBQUM7b0JBQ1QsR0FBRyxHQUFHLENBQUMsYUFBYTtvQkFDcEIsRUFBRSxFQUFFLFdBQVc7aUJBQ2xCLENBQUM7U0FDTDtLQUNKLENBQUMsQ0FBQTtJQUVGLE1BQU0sU0FBUyxHQUFHLE1B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
|
|
@@ -30,8 +30,13 @@ const POST = async (req, res) => {
|
|
|
30
30
|
id: valueId
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
|
-
const attributePossibleValue = await (0, framework_1.refetchEntity)(
|
|
33
|
+
const attributePossibleValue = await (0, framework_1.refetchEntity)({
|
|
34
|
+
entity: 'attribute_possible_value',
|
|
35
|
+
idOrFilter: valueId,
|
|
36
|
+
scope: req.scope,
|
|
37
|
+
fields: req.queryConfig.fields
|
|
38
|
+
});
|
|
34
39
|
return res.status(200).json({ attributePossibleValue: attributePossibleValue });
|
|
35
40
|
};
|
|
36
41
|
exports.POST = POST;
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9hdHRyaWJ1dGVzL1tpZF0vdmFsdWVzL1t2YWx1ZUlkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBcUc7QUFDckcsbURBQW1GO0FBR25GLHNHQUErRztBQUV4RyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBb0QsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkcsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUE7SUFDdEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFaEUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDekQsTUFBTSxFQUFFLDBCQUEwQjtRQUNsQyxHQUFHLEdBQUcsQ0FBQyxXQUFXO1FBQ2xCLE9BQU8sRUFBRTtZQUNMLEdBQUcsR0FBRyxDQUFDLGdCQUFnQjtZQUN2QixFQUFFLEVBQUUsV0FBVztTQUNsQjtLQUNKLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxtQkFBVyxDQUFDLHdCQUFnQixDQUFDLFNBQVMsRUFBRSxxQ0FBcUMsV0FBVyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ3hILENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFBO0FBQzNELENBQUMsQ0FBQTtBQWxCWSxRQUFBLEdBQUcsT0FrQmY7QUFFTSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBaUQsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDakcsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFDOUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQTtJQUU5QixNQUFNLElBQUEsK0RBQW9DLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN0RCxLQUFLLEVBQUU7WUFDSCxHQUFHLElBQUk7WUFDUCxFQUFFLEVBQUUsT0FBTztTQUNkO0tBQ0osQ0FBQyxDQUFBO0lBRUYsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLElBQUEseUJBQWEsRUFBQztRQUMvQyxNQUFNLEVBQUUsMEJBQTBCO1FBQ2xDLFVBQVUsRUFBRSxPQUFPO1FBQ25CLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztRQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNO0tBQ2pDLENBQUMsQ0FBQTtJQUVGLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUE7QUFDbkYsQ0FBQyxDQUFBO0FBbkJZLFFBQUEsSUFBSSxRQW1CaEIifQ==
|
|
@@ -24,8 +24,13 @@ const POST = async (req, res) => {
|
|
|
24
24
|
attribute_id: attributeId
|
|
25
25
|
}]
|
|
26
26
|
});
|
|
27
|
-
const attributePossibleValue = await (0, framework_1.refetchEntity)(
|
|
27
|
+
const attributePossibleValue = await (0, framework_1.refetchEntity)({
|
|
28
|
+
entity: 'attribute_possible_value',
|
|
29
|
+
idOrFilter: createdAttributeValue.id,
|
|
30
|
+
scope: req.scope,
|
|
31
|
+
fields: req.queryConfig.fields,
|
|
32
|
+
});
|
|
28
33
|
return res.status(201).json({ attributePossibleValue });
|
|
29
34
|
};
|
|
30
35
|
exports.POST = POST;
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9hdHRyaWJ1dGVzL1tpZF0vdmFsdWVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1EQUFvRztBQUVwRyxxREFBc0U7QUFDdEUsdUlBQXlJO0FBRWxJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFxRCxFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNsRSxNQUFNLEVBQUUsMEJBQTBCO1FBQ2xDLE9BQU8sRUFBRTtZQUNMLFlBQVksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7U0FDOUI7UUFDRCxHQUFHLEdBQUcsQ0FBQyxXQUFXO0tBQ3JCLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQzVILENBQUMsQ0FBQTtBQVpZLFFBQUEsR0FBRyxPQVlmO0FBRU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQWlELEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ2pHLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO0lBRWpDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFBLHdFQUFxQyxFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbkcsS0FBSyxFQUFFLENBQUM7Z0JBQ0osR0FBRyxHQUFHLENBQUMsYUFBYTtnQkFDcEIsWUFBWSxFQUFFLFdBQVc7YUFDNUIsQ0FBQztLQUNMLENBQUMsQ0FBQTtJQUVGLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFBLHlCQUFhLEVBQUM7UUFDL0MsTUFBTSxFQUFFLDBCQUEwQjtRQUNsQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsRUFBRTtRQUNwQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtLQUNqQyxDQUFDLENBQUE7SUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFBO0FBQzNELENBQUMsQ0FBQTtBQWxCWSxRQUFBLElBQUksUUFrQmhCIn0=
|
|
@@ -21,8 +21,13 @@ const POST = async (req, res) => {
|
|
|
21
21
|
const { result } = await (0, workflows_1.createAttributesWorkflow)(req.scope).run({
|
|
22
22
|
input: { attributes: [attributeDto] },
|
|
23
23
|
});
|
|
24
|
-
const attribute = await (0, framework_1.refetchEntity)(
|
|
24
|
+
const attribute = await (0, framework_1.refetchEntity)({
|
|
25
|
+
entity: 'attribute',
|
|
26
|
+
idOrFilter: result[0].id,
|
|
27
|
+
scope: req.scope,
|
|
28
|
+
fields: req.queryConfig?.fields ?? []
|
|
29
|
+
});
|
|
25
30
|
res.status(201).json({ attribute });
|
|
26
31
|
};
|
|
27
32
|
exports.POST = POST;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9hdHRyaWJ1dGVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFvRztBQUVwRyxxREFBaUU7QUFDakUscURBQXNFO0FBRS9ELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFnRCxFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUMvRixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSx3RUFBd0U7SUFDeEUsNENBQTRDO0lBQzVDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNyRCxNQUFNLEVBQUUsV0FBVztRQUNuQixPQUFPLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjtRQUM3QixHQUFHLEdBQUcsQ0FBQyxXQUFXO0tBQ3JCLENBQUMsQ0FBQTtJQUNGLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ3RILENBQUMsQ0FBQTtBQVZZLFFBQUEsR0FBRyxPQVVmO0FBRU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQTRDLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQzVGLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUE7SUFFdEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSxvQ0FBd0IsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzdELEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO0tBQ3hDLENBQUMsQ0FBQTtJQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSx5QkFBYSxFQUFDO1FBQ2xDLE1BQU0sRUFBRSxXQUFXO1FBQ25CLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN4QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUU7S0FDeEMsQ0FBQyxDQUFBO0lBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZDLENBQUMsQ0FBQTtBQWZZLFFBQUEsSUFBSSxRQWVoQiJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250611173345 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250611173345 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "attribute" drop constraint if exists "attribute_ui_component_check";`);
|
|
8
|
+
this.addSql(`alter table if exists "attribute" add constraint "attribute_ui_component_check" check("ui_component" in ('select', 'multivalue', 'unit', 'toggle', 'text_area', 'color_picker', 'repeater'));`);
|
|
9
|
+
}
|
|
10
|
+
async down() {
|
|
11
|
+
this.addSql(`alter table if exists "attribute" drop constraint if exists "attribute_ui_component_check";`);
|
|
12
|
+
this.addSql(`alter table if exists "attribute" add constraint "attribute_ui_component_check" check("ui_component" in ('select', 'multivalue', 'unit', 'toggle', 'text-area', 'color_picker', 'repeater'));`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20250611173345 = Migration20250611173345;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA2MTIxOTI4NTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hdHRyaWJ1dGUvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MDYxMjE5Mjg1OC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBa0Q7QUFFbEQsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsNkZBQTZGLENBQUMsQ0FBQztRQUUzRyxJQUFJLENBQUMsTUFBTSxDQUFDLCtMQUErTCxDQUFDLENBQUM7SUFDL00sQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsNkZBQTZGLENBQUMsQ0FBQztRQUUzRyxJQUFJLENBQUMsTUFBTSxDQUFDLCtMQUErTCxDQUFDLENBQUM7SUFDL00sQ0FBQztDQUVGO0FBZEQsMERBY0MifQ==
|
|
@@ -9,5 +9,6 @@ var AttributeUIComponent;
|
|
|
9
9
|
AttributeUIComponent["TOGGLE"] = "toggle";
|
|
10
10
|
AttributeUIComponent["TEXTAREA"] = "text_area";
|
|
11
11
|
AttributeUIComponent["COLOR_PICKER"] = "color_picker";
|
|
12
|
+
AttributeUIComponent["REPEATER"] = "repeater";
|
|
12
13
|
})(AttributeUIComponent || (exports.AttributeUIComponent = AttributeUIComponent = {}));
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvYXR0cmlidXRlL3R5cGVzL2F0dHJpYnV0ZS9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBWSxvQkFRWDtBQVJELFdBQVksb0JBQW9CO0lBQzVCLHlDQUFpQixDQUFBO0lBQ2pCLGlEQUF5QixDQUFBO0lBQ3pCLHFDQUFhLENBQUE7SUFDYix5Q0FBaUIsQ0FBQTtJQUNqQiw4Q0FBc0IsQ0FBQTtJQUN0QixxREFBNkIsQ0FBQTtJQUM3Qiw2Q0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBUlcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFRL0IifQ==
|
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@csbeker/medusa-product-attributes",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "A plugin for adding attributes support to MedusaJS products",
|
|
5
5
|
"author": "Cronopia Web (https://github.com/cronopia-web)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,19 +38,19 @@
|
|
|
38
38
|
"@dnd-kit/core": "^6.1.0",
|
|
39
39
|
"@dnd-kit/sortable": "^8.0.0",
|
|
40
40
|
"@dnd-kit/utilities": "^3.2.2",
|
|
41
|
-
"@medusajs/admin-sdk": "2.
|
|
42
|
-
"@medusajs/cli": "2.
|
|
43
|
-
"@medusajs/framework": "2.
|
|
44
|
-
"@medusajs/medusa": "2.
|
|
45
|
-
"@medusajs/js-sdk": "2.
|
|
46
|
-
"@medusajs/test-utils": "2.
|
|
41
|
+
"@medusajs/admin-sdk": "^2.12.1",
|
|
42
|
+
"@medusajs/cli": "2.12.1",
|
|
43
|
+
"@medusajs/framework": "2.12.1",
|
|
44
|
+
"@medusajs/medusa": "2.12.1",
|
|
45
|
+
"@medusajs/js-sdk": "2.12.1",
|
|
46
|
+
"@medusajs/test-utils": "2.12.1",
|
|
47
47
|
"@medusajs/ui": "4.0.4",
|
|
48
|
-
"@medusajs/icons": "2.
|
|
49
|
-
"@mikro-orm/cli": "6.4.
|
|
50
|
-
"@mikro-orm/core": "6.4.
|
|
51
|
-
"@mikro-orm/knex": "6.4.
|
|
52
|
-
"@mikro-orm/migrations": "6.4.
|
|
53
|
-
"@mikro-orm/postgresql": "6.4.
|
|
48
|
+
"@medusajs/icons": "2.12.1",
|
|
49
|
+
"@mikro-orm/cli": "6.4.16",
|
|
50
|
+
"@mikro-orm/core": "6.4.16",
|
|
51
|
+
"@mikro-orm/knex": "6.4.16",
|
|
52
|
+
"@mikro-orm/migrations": "6.4.16",
|
|
53
|
+
"@mikro-orm/postgresql": "6.4.16",
|
|
54
54
|
"@swc/core": "1.5.7",
|
|
55
55
|
"@tanstack/react-query": "5.64.2",
|
|
56
56
|
"@types/node": "^20.0.0",
|
|
@@ -67,19 +67,19 @@
|
|
|
67
67
|
"yalc": "^1.0.0-pre.53"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
|
-
"@medusajs/admin-sdk": "2.
|
|
71
|
-
"@medusajs/cli": "2.
|
|
72
|
-
"@medusajs/framework": "2.
|
|
73
|
-
"@medusajs/test-utils": "2.
|
|
74
|
-
"@medusajs/medusa": "2.
|
|
75
|
-
"@medusajs/js-sdk": "2.
|
|
70
|
+
"@medusajs/admin-sdk": "2.12.1",
|
|
71
|
+
"@medusajs/cli": "2.12.1",
|
|
72
|
+
"@medusajs/framework": "2.12.1",
|
|
73
|
+
"@medusajs/test-utils": "2.12.1",
|
|
74
|
+
"@medusajs/medusa": "2.12.1",
|
|
75
|
+
"@medusajs/js-sdk": "2.12.1",
|
|
76
76
|
"@medusajs/ui": "4.0.23",
|
|
77
|
-
"@medusajs/icons": "2.
|
|
78
|
-
"@mikro-orm/cli": "6.4.
|
|
79
|
-
"@mikro-orm/core": "6.4.
|
|
80
|
-
"@mikro-orm/knex": "6.4.
|
|
81
|
-
"@mikro-orm/migrations": "6.4.
|
|
82
|
-
"@mikro-orm/postgresql": "6.4.
|
|
77
|
+
"@medusajs/icons": "2.12.1",
|
|
78
|
+
"@mikro-orm/cli": "6.4.16",
|
|
79
|
+
"@mikro-orm/core": "6.4.16",
|
|
80
|
+
"@mikro-orm/knex": "6.4.16",
|
|
81
|
+
"@mikro-orm/migrations": "6.4.16",
|
|
82
|
+
"@mikro-orm/postgresql": "6.4.16",
|
|
83
83
|
"awilix": "^8.0.1",
|
|
84
84
|
"pg": "^8.13.0"
|
|
85
85
|
},
|
|
@@ -264,9 +264,15 @@ export const AttributeForm = ({
|
|
|
264
264
|
component === 'unit' ? 'Unit' :
|
|
265
265
|
component === 'toggle' ? 'Toggle' :
|
|
266
266
|
component === 'text_area' ? 'Text' :
|
|
267
|
-
component
|
|
267
|
+
component === 'color_picker' ? 'Color Picker' :
|
|
268
|
+
component === 'repeater' ? 'Repeater (Array de objetos)' :
|
|
269
|
+
component}
|
|
268
270
|
</Select.Item>
|
|
269
271
|
))}
|
|
272
|
+
{/* Opción agregada a mano */}
|
|
273
|
+
<Select.Item key="custom-manual" value="custom-manual">
|
|
274
|
+
Opción agregada a mano
|
|
275
|
+
</Select.Item>
|
|
270
276
|
</Select.Content>
|
|
271
277
|
</Select>
|
|
272
278
|
{form.formState.errors.ui_component && (
|
|
@@ -274,11 +280,11 @@ export const AttributeForm = ({
|
|
|
274
280
|
{form.formState.errors.ui_component.message}
|
|
275
281
|
</Text>
|
|
276
282
|
)}
|
|
277
|
-
</div>
|
|
283
|
+
</div>
|
|
278
284
|
|
|
279
|
-
{form.watch("ui_component") === AttributeUIComponent.SELECT && (
|
|
285
|
+
{form.watch("ui_component") === AttributeUIComponent.SELECT && (
|
|
280
286
|
<InlineTip label="Tip" variant="info" >
|
|
281
|
-
When creating Single Select buyers will be able to choose only one value. This type of attribute will be good for product specifications.
|
|
287
|
+
When creating Single Select buyers - se cambio ultimaaa vez - will be able to choose only one value. This type of attribute will be good for product specifications.
|
|
282
288
|
</InlineTip>
|
|
283
289
|
)}
|
|
284
290
|
|
|
@@ -287,6 +293,12 @@ export const AttributeForm = ({
|
|
|
287
293
|
<PossibleValuesList />
|
|
288
294
|
</div>
|
|
289
295
|
)}
|
|
296
|
+
|
|
297
|
+
{form.watch("ui_component") === AttributeUIComponent.REPEATER && (
|
|
298
|
+
<InlineTip label="Tip" variant="info">
|
|
299
|
+
El tipo <b>Repeater</b> permite guardar un array de objetos serializado como string en el campo value. Ejemplo: <code>{`[{"label": "Color", "value": "Rojo"}]`}</code>
|
|
300
|
+
</InlineTip>
|
|
301
|
+
)}
|
|
290
302
|
</div>
|
|
291
303
|
);
|
|
292
304
|
|
|
@@ -2,9 +2,9 @@ import { defineRouteConfig } from "@medusajs/admin-sdk";
|
|
|
2
2
|
import {
|
|
3
3
|
FocusModal,
|
|
4
4
|
Button,
|
|
5
|
-
toast,
|
|
5
|
+
toast,
|
|
6
6
|
ProgressTabs,
|
|
7
|
-
} from "@medusajs/ui";
|
|
7
|
+
} from "@medusajs/ui";
|
|
8
8
|
import { useNavigate } from "react-router-dom";
|
|
9
9
|
import { medusaClient } from "../../../lib/config";
|
|
10
10
|
import { useEffect, useState } from "react";
|
|
@@ -10,7 +10,7 @@ export const GET = async (req: MedusaRequest<AdminGetAttributeParamsType>, res:
|
|
|
10
10
|
|
|
11
11
|
const { data: [attributeSet] } = await query.graph({
|
|
12
12
|
entity: 'attribute_set',
|
|
13
|
-
filters: { id },
|
|
13
|
+
filters: { id },
|
|
14
14
|
...req.queryConfig,
|
|
15
15
|
}, {
|
|
16
16
|
throwIfKeyNotFound: true,
|
|
@@ -30,12 +30,12 @@ export const POST = async (req: MedusaRequest<AdminUpdateAttributeSetType>, res:
|
|
|
30
30
|
}
|
|
31
31
|
})
|
|
32
32
|
|
|
33
|
-
const attributeSet = await refetchEntity(
|
|
34
|
-
'attribute_set',
|
|
35
|
-
id,
|
|
36
|
-
req.scope,
|
|
37
|
-
req.queryConfig.fields,
|
|
38
|
-
)
|
|
33
|
+
const attributeSet = await refetchEntity({
|
|
34
|
+
entity: 'attribute_set',
|
|
35
|
+
idOrFilter: id,
|
|
36
|
+
scope: req.scope,
|
|
37
|
+
fields: req.queryConfig.fields,
|
|
38
|
+
})
|
|
39
39
|
|
|
40
40
|
return res.status(200).json({ attributeSet })
|
|
41
41
|
}
|
|
@@ -11,17 +11,17 @@ export const POST = async (req: MedusaRequest<AdminCreateAttributeSetType>, res:
|
|
|
11
11
|
input: [req.validatedBody]
|
|
12
12
|
})
|
|
13
13
|
|
|
14
|
-
const response = await refetchEntity(
|
|
15
|
-
'attribute_set',
|
|
16
|
-
attributeSet.id,
|
|
17
|
-
req.scope,
|
|
18
|
-
req.queryConfig.fields,
|
|
19
|
-
)
|
|
20
|
-
|
|
14
|
+
const response = await refetchEntity({
|
|
15
|
+
entity: 'attribute_set',
|
|
16
|
+
idOrFilter: attributeSet.id,
|
|
17
|
+
scope: req.scope,
|
|
18
|
+
fields: req.queryConfig.fields,
|
|
19
|
+
})
|
|
20
|
+
|
|
21
21
|
return res.status(201).json({ attribute_set: response })
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export const GET = async (req:MedusaRequest<AdminGetAttributesSetsParamsType>, res: MedusaResponse) => {
|
|
24
|
+
export const GET = async (req: MedusaRequest<AdminGetAttributesSetsParamsType>, res: MedusaResponse) => {
|
|
25
25
|
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
|
26
26
|
|
|
27
27
|
const { data: attributeSets, metadata } = await query.graph({
|
|
@@ -23,18 +23,20 @@ export const POST = async (req: MedusaRequest<UpdateAttributeDTO>, res: MedusaRe
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
await updateAttributesWorkflow(req.scope).run({
|
|
26
|
-
input: {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
input: {
|
|
27
|
+
attributes: [{
|
|
28
|
+
...req.validatedBody,
|
|
29
|
+
id: attributeId
|
|
30
|
+
}]
|
|
31
|
+
}
|
|
30
32
|
})
|
|
31
33
|
|
|
32
|
-
const attribute = await refetchEntities(
|
|
33
|
-
'attribute',
|
|
34
|
-
attributeId,
|
|
35
|
-
req.scope,
|
|
36
|
-
req.queryConfig.fields
|
|
37
|
-
)
|
|
34
|
+
const attribute = await refetchEntities({
|
|
35
|
+
entity: 'attribute',
|
|
36
|
+
idOrFilter: attributeId,
|
|
37
|
+
scope: req.scope,
|
|
38
|
+
fields: req.queryConfig.fields
|
|
39
|
+
})
|
|
38
40
|
|
|
39
41
|
return res.status(201).json({ attribute })
|
|
40
42
|
}
|
|
@@ -60,7 +62,7 @@ export const GET = async (req: MedusaRequest<AdminGetAttributeParamsType>, res:
|
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
export const DELETE = async (req: MedusaRequest, res: MedusaResponse) => {
|
|
63
|
-
const attributeId = req.params.id
|
|
65
|
+
const attributeId = req.params.id
|
|
64
66
|
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
|
65
67
|
|
|
66
68
|
const { data: [attribute] } = await query.graph({
|
|
@@ -35,7 +35,12 @@ export const POST = async (req: MedusaRequest<AdminUpdateAttributeValueType>, re
|
|
|
35
35
|
}
|
|
36
36
|
})
|
|
37
37
|
|
|
38
|
-
const attributePossibleValue = await refetchEntity(
|
|
38
|
+
const attributePossibleValue = await refetchEntity({
|
|
39
|
+
entity: 'attribute_possible_value',
|
|
40
|
+
idOrFilter: valueId,
|
|
41
|
+
scope: req.scope,
|
|
42
|
+
fields: req.queryConfig.fields
|
|
43
|
+
})
|
|
39
44
|
|
|
40
45
|
return res.status(200).json({ attributePossibleValue: attributePossibleValue })
|
|
41
46
|
}
|
|
@@ -28,12 +28,12 @@ export const POST = async (req: MedusaRequest<AdminCreateAttributeValueType>, re
|
|
|
28
28
|
}]
|
|
29
29
|
})
|
|
30
30
|
|
|
31
|
-
const attributePossibleValue = await refetchEntity(
|
|
32
|
-
'attribute_possible_value',
|
|
33
|
-
createdAttributeValue.id,
|
|
34
|
-
req.scope,
|
|
35
|
-
req.queryConfig.fields,
|
|
36
|
-
)
|
|
31
|
+
const attributePossibleValue = await refetchEntity({
|
|
32
|
+
entity: 'attribute_possible_value',
|
|
33
|
+
idOrFilter: createdAttributeValue.id,
|
|
34
|
+
scope: req.scope,
|
|
35
|
+
fields: req.queryConfig.fields,
|
|
36
|
+
})
|
|
37
37
|
|
|
38
38
|
return res.status(201).json({ attributePossibleValue })
|
|
39
39
|
}
|
|
@@ -22,12 +22,12 @@ export const POST = async (req: MedusaRequest<AdminCreateAttributeType>, res: Me
|
|
|
22
22
|
input: { attributes: [attributeDto] },
|
|
23
23
|
})
|
|
24
24
|
|
|
25
|
-
const attribute = await refetchEntity(
|
|
26
|
-
'attribute',
|
|
27
|
-
result[0].id,
|
|
28
|
-
req.scope,
|
|
29
|
-
req.queryConfig?.fields ?? []
|
|
30
|
-
)
|
|
25
|
+
const attribute = await refetchEntity({
|
|
26
|
+
entity: 'attribute',
|
|
27
|
+
idOrFilter: result[0].id,
|
|
28
|
+
scope: req.scope,
|
|
29
|
+
fields: req.queryConfig?.fields ?? []
|
|
30
|
+
})
|
|
31
31
|
|
|
32
32
|
res.status(201).json({ attribute })
|
|
33
|
-
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
export class Migration20250611173345 extends Migration {
|
|
4
|
+
|
|
5
|
+
override async up(): Promise<void> {
|
|
6
|
+
this.addSql(`alter table if exists "attribute" drop constraint if exists "attribute_ui_component_check";`);
|
|
7
|
+
|
|
8
|
+
this.addSql(`alter table if exists "attribute" add constraint "attribute_ui_component_check" check("ui_component" in ('select', 'multivalue', 'unit', 'toggle', 'text_area', 'color_picker', 'repeater'));`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
override async down(): Promise<void> {
|
|
12
|
+
this.addSql(`alter table if exists "attribute" drop constraint if exists "attribute_ui_component_check";`);
|
|
13
|
+
|
|
14
|
+
this.addSql(`alter table if exists "attribute" add constraint "attribute_ui_component_check" check("ui_component" in ('select', 'multivalue', 'unit', 'toggle', 'text-area', 'color_picker', 'repeater'));`);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
}
|
|
@@ -6,7 +6,8 @@ export enum AttributeUIComponent {
|
|
|
6
6
|
UNIT = 'unit', // cantimeters, grams etc which are represented in scale table
|
|
7
7
|
TOGGLE = 'toggle',
|
|
8
8
|
TEXTAREA = 'text_area',
|
|
9
|
-
COLOR_PICKER = 'color_picker'
|
|
9
|
+
COLOR_PICKER = 'color_picker',
|
|
10
|
+
REPEATER = 'repeater'
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export type CreateAttributesWorkflowInput = {
|
|
@@ -27,7 +28,7 @@ export interface UpdateAttributeDTO {
|
|
|
27
28
|
* The id of the attribute to update.
|
|
28
29
|
*/
|
|
29
30
|
id: string
|
|
30
|
-
|
|
31
|
+
|
|
31
32
|
/**
|
|
32
33
|
* The name of the attribute.
|
|
33
34
|
*/
|