Skip to content

Commit fd39659

Browse files
authored
feat(): Pluralized props for list readonly link (medusajs#14190)
* feat(): Pluralized props for list readonly link * Create perfect-jeans-end.md * handle backward compat * Add tests case
1 parent bca145b commit fd39659

File tree

3 files changed

+102
-15
lines changed

3 files changed

+102
-15
lines changed

.changeset/perfect-jeans-end.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@medusajs/utils": patch
3+
---
4+
5+
feat(): Pluralized props for list readonly link

integration-tests/modules/__tests__/link-modules/define-link.spec.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,67 @@ medusaIntegrationTestRunner({
627627
],
628628
})
629629
})
630+
631+
it("should generate a read-only link definition with pluralized alias when isList is true", async () => {
632+
const currencyLinks = CurrencyModule.linkable
633+
const regionLinks = RegionModule.linkable
634+
635+
defineLink(
636+
{
637+
linkable: currencyLinks.currency,
638+
field: "region_id",
639+
},
640+
{
641+
linkable: regionLinks.region,
642+
},
643+
{
644+
readOnly: true,
645+
isList: true,
646+
}
647+
)
648+
649+
const linkDefinition = MedusaModule.getCustomLinks()
650+
.map((linkDefinition: any) => {
651+
const definition = linkDefinition(
652+
MedusaModule.getAllJoinerConfigs()
653+
)
654+
return definition.isReadOnlyLink && definition
655+
})
656+
.filter(Boolean)[0]
657+
658+
expect(linkDefinition).toEqual({
659+
isLink: true,
660+
isReadOnlyLink: true,
661+
extends: [
662+
{
663+
serviceName: "currency",
664+
entity: "Currency",
665+
fieldAlias: undefined,
666+
relationship: {
667+
serviceName: "region",
668+
entity: "Region",
669+
primaryKey: "id",
670+
foreignKey: "region_id",
671+
alias: "region",
672+
isList: true,
673+
},
674+
},
675+
{
676+
serviceName: "currency",
677+
entity: "Currency",
678+
fieldAlias: undefined,
679+
relationship: {
680+
serviceName: "region",
681+
entity: "Region",
682+
primaryKey: "id",
683+
foreignKey: "region_id",
684+
alias: "regions",
685+
isList: true,
686+
},
687+
},
688+
],
689+
})
690+
})
630691
})
631692
},
632693
})

packages/core/utils/src/modules-sdk/define-link.ts

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -517,24 +517,45 @@ ${serviceBObj.module}: {
517517
}`)
518518
}
519519

520+
const extendsConfig: ModuleJoinerConfig["extends"] = [
521+
{
522+
serviceName: serviceAObj.module,
523+
entity: serviceAObj.entity,
524+
fieldAlias: buildFieldAlias(readOnlyLinkOptions?.shortcut),
525+
relationship: {
526+
serviceName: serviceBObj.module,
527+
entity: serviceBObj.entity,
528+
primaryKey: serviceBObj.primaryKey,
529+
foreignKey: serviceAObj.field,
530+
alias: serviceBObj.alias,
531+
isList: readOnlyLinkOptions?.isList ?? serviceAObj.isList,
532+
},
533+
},
534+
]
535+
536+
if (readOnlyLinkOptions?.isList || serviceAObj.isList) {
537+
extendsConfig.push({
538+
serviceName: serviceAObj.module,
539+
entity: serviceAObj.entity,
540+
fieldAlias: buildFieldAlias(readOnlyLinkOptions?.shortcut),
541+
relationship: {
542+
serviceName: serviceBObj.module,
543+
entity: serviceBObj.entity,
544+
primaryKey: serviceBObj.primaryKey,
545+
foreignKey: serviceAObj.field,
546+
alias:
547+
readOnlyLinkOptions?.isList ?? serviceAObj.isList
548+
? pluralize(serviceBObj.alias)
549+
: serviceBObj.alias,
550+
isList: readOnlyLinkOptions?.isList ?? serviceAObj.isList,
551+
},
552+
})
553+
}
554+
520555
return {
521556
isLink: true,
522557
isReadOnlyLink: true,
523-
extends: [
524-
{
525-
serviceName: serviceAObj.module,
526-
entity: serviceAObj.entity,
527-
fieldAlias: buildFieldAlias(readOnlyLinkOptions?.shortcut),
528-
relationship: {
529-
serviceName: serviceBObj.module,
530-
entity: serviceBObj.entity,
531-
primaryKey: serviceBObj.primaryKey,
532-
foreignKey: serviceAObj.field,
533-
alias: serviceBObj.alias,
534-
isList: readOnlyLinkOptions?.isList ?? serviceAObj.isList,
535-
},
536-
},
537-
],
558+
extends: extendsConfig,
538559
}
539560
}
540561

0 commit comments

Comments
 (0)