diff --git a/daikoku/javascript/src/components/backoffice/apis/TeamApiSubscriptions.tsx b/daikoku/javascript/src/components/backoffice/apis/TeamApiSubscriptions.tsx index 025e64b80..3f866b1b6 100644 --- a/daikoku/javascript/src/components/backoffice/apis/TeamApiSubscriptions.tsx +++ b/daikoku/javascript/src/components/backoffice/apis/TeamApiSubscriptions.tsx @@ -77,6 +77,7 @@ interface IApiSubscriptionGql extends ISubscriptionCustomization { _id: string; adminCustomName: string; enabled: boolean; + validUntil: string; api: { _id: string; name: string; @@ -196,7 +197,6 @@ export const TeamApiSubscriptions = ({ tableRef.current?.update(); } }, [api, subscriptionsQuery.data]); - useEffect(() => { tableRef.current?.update(); }, [filters]); @@ -211,6 +211,7 @@ export const TeamApiSubscriptions = ({ meta: { style: { textAlign: "left" } }, filterFn: (row, _, value) => { const sub = row.original; + const displayed: string = sub.team._id === currentTeam._id ? sub.customName || sub.apiKey.clientName @@ -223,7 +224,7 @@ export const TeamApiSubscriptions = ({ sortingFn: "basic", cell: (info) => { const sub = info.row.original; - const titleDate = `
+ let titleDate = `
${translate("validationDate.apikey.badge.title")} : ${sub.validUntil ? formatDate(sub.validUntil, language) : "N/A"}
`; @@ -236,6 +237,10 @@ export const TeamApiSubscriptions = ({
  • ${translate("aggregated.apikey.badge.apikey.name")}: ${sub.parent.adminCustomName}
  • `; + titleDate = `
    + ${translate("validationDate.apikey.badge.title")} : + ${sub.parent.validUntil ? formatDate(sub.parent.validUntil, language) : "N/A"} +
    `; return (
    {info.getValue()} @@ -386,8 +391,8 @@ export const TeamApiSubscriptions = ({ }), ]; - const updateMeta = (sub: IApiSubscriptionGql) => - openSubMetadataModal({ + const updateMeta = (sub: IApiSubscriptionGql) => { + return openSubMetadataModal({ save: (updates: CustomSubscriptionData) => { Services.updateSubscription(currentTeam, { ...sub, ...updates }).then( () => { @@ -404,6 +409,7 @@ export const TeamApiSubscriptions = ({ (p) => sub.plan._id === p._id )!, }); + }; const regenerateApiKeySecret = useMutation({ mutationFn: (sub: IApiSubscriptionGql) => diff --git a/daikoku/javascript/src/contexts/modals/SubscriptionMetadataModal.tsx b/daikoku/javascript/src/contexts/modals/SubscriptionMetadataModal.tsx index 628ff8546..08ca52573 100644 --- a/daikoku/javascript/src/contexts/modals/SubscriptionMetadataModal.tsx +++ b/daikoku/javascript/src/contexts/modals/SubscriptionMetadataModal.tsx @@ -77,7 +77,7 @@ export const SubscriptionMetadataModal = ( } }; - const schema = { + let schema = { customMetadata: { type: type.object, label: translate("Additional metadata"), @@ -119,12 +119,15 @@ export const SubscriptionMetadataModal = ( label: translate("sub.meta.modal.admin.custom.name.label"), help: translate("sub.meta.modal.admin.custom.name.help"), }, - validUntil: { + }; + + if (!props.subscription?.parent) { + schema["validUntil"] = { type: type.date, label: translate("sub.meta.modal.valid.until.label"), help: translate("sub.meta.modal.valid.until.help"), - }, - }; + }; + } const mandatoryMetadataSchema = (plan?: IUsagePlan) => ({ metadata: { @@ -218,7 +221,6 @@ export const SubscriptionMetadataModal = ( }, [[], []] ); - const value = { metadata: Object.fromEntries(maybeMetadata), customMetadata: Object.fromEntries(maybeCustomMetadata), diff --git a/daikoku/javascript/src/services/index.ts b/daikoku/javascript/src/services/index.ts index 16fdd1994..a91666290 100644 --- a/daikoku/javascript/src/services/index.ts +++ b/daikoku/javascript/src/services/index.ts @@ -1620,6 +1620,7 @@ export const graphql = { _id adminCustomName enabled + validUntil api { _id name diff --git a/daikoku/javascript/src/types/api.ts b/daikoku/javascript/src/types/api.ts index 723bd68b5..9c89451f9 100644 --- a/daikoku/javascript/src/types/api.ts +++ b/daikoku/javascript/src/types/api.ts @@ -378,7 +378,7 @@ export interface IBaseSubscription { team: string; api: string; createdAt: string; - validUntil: string; + validUntil?: string; by: string; customName: string | null; enabled: boolean; @@ -443,7 +443,8 @@ export interface ISubscriptionCustomization { customMaxPerDay?: number; customReadOnly?: boolean; adminCustomName?: string; - validUntil: string; + validUntil?: string; + parent : string | null; } export interface ISubscriptionExtended extends ISubscription {