feat(): Pluralized props for list readonly link (#14190)
* feat(): Pluralized props for list readonly link * Create perfect-jeans-end.md * handle backward compat * Add tests case
This commit is contained in:
committed by
GitHub
parent
bca145bdbe
commit
fd3965974d
5
.changeset/perfect-jeans-end.md
Normal file
5
.changeset/perfect-jeans-end.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/utils": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat(): Pluralized props for list readonly link
|
||||||
@@ -627,6 +627,67 @@ medusaIntegrationTestRunner({
|
|||||||
],
|
],
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should generate a read-only link definition with pluralized alias when isList is true", async () => {
|
||||||
|
const currencyLinks = CurrencyModule.linkable
|
||||||
|
const regionLinks = RegionModule.linkable
|
||||||
|
|
||||||
|
defineLink(
|
||||||
|
{
|
||||||
|
linkable: currencyLinks.currency,
|
||||||
|
field: "region_id",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
linkable: regionLinks.region,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readOnly: true,
|
||||||
|
isList: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const linkDefinition = MedusaModule.getCustomLinks()
|
||||||
|
.map((linkDefinition: any) => {
|
||||||
|
const definition = linkDefinition(
|
||||||
|
MedusaModule.getAllJoinerConfigs()
|
||||||
|
)
|
||||||
|
return definition.isReadOnlyLink && definition
|
||||||
|
})
|
||||||
|
.filter(Boolean)[0]
|
||||||
|
|
||||||
|
expect(linkDefinition).toEqual({
|
||||||
|
isLink: true,
|
||||||
|
isReadOnlyLink: true,
|
||||||
|
extends: [
|
||||||
|
{
|
||||||
|
serviceName: "currency",
|
||||||
|
entity: "Currency",
|
||||||
|
fieldAlias: undefined,
|
||||||
|
relationship: {
|
||||||
|
serviceName: "region",
|
||||||
|
entity: "Region",
|
||||||
|
primaryKey: "id",
|
||||||
|
foreignKey: "region_id",
|
||||||
|
alias: "region",
|
||||||
|
isList: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
serviceName: "currency",
|
||||||
|
entity: "Currency",
|
||||||
|
fieldAlias: undefined,
|
||||||
|
relationship: {
|
||||||
|
serviceName: "region",
|
||||||
|
entity: "Region",
|
||||||
|
primaryKey: "id",
|
||||||
|
foreignKey: "region_id",
|
||||||
|
alias: "regions",
|
||||||
|
isList: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -517,24 +517,45 @@ ${serviceBObj.module}: {
|
|||||||
}`)
|
}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const extendsConfig: ModuleJoinerConfig["extends"] = [
|
||||||
|
{
|
||||||
|
serviceName: serviceAObj.module,
|
||||||
|
entity: serviceAObj.entity,
|
||||||
|
fieldAlias: buildFieldAlias(readOnlyLinkOptions?.shortcut),
|
||||||
|
relationship: {
|
||||||
|
serviceName: serviceBObj.module,
|
||||||
|
entity: serviceBObj.entity,
|
||||||
|
primaryKey: serviceBObj.primaryKey,
|
||||||
|
foreignKey: serviceAObj.field,
|
||||||
|
alias: serviceBObj.alias,
|
||||||
|
isList: readOnlyLinkOptions?.isList ?? serviceAObj.isList,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
if (readOnlyLinkOptions?.isList || serviceAObj.isList) {
|
||||||
|
extendsConfig.push({
|
||||||
|
serviceName: serviceAObj.module,
|
||||||
|
entity: serviceAObj.entity,
|
||||||
|
fieldAlias: buildFieldAlias(readOnlyLinkOptions?.shortcut),
|
||||||
|
relationship: {
|
||||||
|
serviceName: serviceBObj.module,
|
||||||
|
entity: serviceBObj.entity,
|
||||||
|
primaryKey: serviceBObj.primaryKey,
|
||||||
|
foreignKey: serviceAObj.field,
|
||||||
|
alias:
|
||||||
|
readOnlyLinkOptions?.isList ?? serviceAObj.isList
|
||||||
|
? pluralize(serviceBObj.alias)
|
||||||
|
: serviceBObj.alias,
|
||||||
|
isList: readOnlyLinkOptions?.isList ?? serviceAObj.isList,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
isLink: true,
|
isLink: true,
|
||||||
isReadOnlyLink: true,
|
isReadOnlyLink: true,
|
||||||
extends: [
|
extends: extendsConfig,
|
||||||
{
|
|
||||||
serviceName: serviceAObj.module,
|
|
||||||
entity: serviceAObj.entity,
|
|
||||||
fieldAlias: buildFieldAlias(readOnlyLinkOptions?.shortcut),
|
|
||||||
relationship: {
|
|
||||||
serviceName: serviceBObj.module,
|
|
||||||
entity: serviceBObj.entity,
|
|
||||||
primaryKey: serviceBObj.primaryKey,
|
|
||||||
foreignKey: serviceAObj.field,
|
|
||||||
alias: serviceBObj.alias,
|
|
||||||
isList: readOnlyLinkOptions?.isList ?? serviceAObj.isList,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user