feat(plugins/org): add overwrites to membership and ownership cards
Signed-off-by: secustor <sebastian@poxhofer.at>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-org': patch
|
||||
---
|
||||
|
||||
Add `initialRelationAggregation` and `showAggregateMembersToggle` options to `EntityMembersListCard` as well to `EntityOwnershipCard`
|
||||
@@ -22,6 +22,11 @@ app:
|
||||
ownerEntityRefs: [cubic-belugas]
|
||||
|
||||
extensions:
|
||||
- entity-card:org/members-list:
|
||||
config:
|
||||
showAggregateMembersToggle: true
|
||||
initialRelationAggregation: aggregated
|
||||
|
||||
# - apis.plugin.graphiql.browse.gitlab: true
|
||||
# - graphiql-endpoint:graphiql/gitlab: true
|
||||
|
||||
|
||||
@@ -63,13 +63,17 @@ const _default: OverridableFrontendPlugin<
|
||||
};
|
||||
}>;
|
||||
'entity-card:org/members-list': ExtensionDefinition<{
|
||||
kind: 'entity-card';
|
||||
name: 'members-list';
|
||||
config: {
|
||||
initialRelationAggregation: 'direct' | 'aggregated' | undefined;
|
||||
showAggregateMembersToggle: boolean | undefined;
|
||||
} & {
|
||||
filter: EntityPredicate | undefined;
|
||||
type: 'content' | 'summary' | 'info' | undefined;
|
||||
};
|
||||
configInput: {
|
||||
showAggregateMembersToggle?: boolean | undefined;
|
||||
initialRelationAggregation?: 'direct' | 'aggregated' | undefined;
|
||||
} & {
|
||||
filter?: EntityPredicate | undefined;
|
||||
type?: 'content' | 'summary' | 'info' | undefined;
|
||||
};
|
||||
@@ -96,7 +100,17 @@ const _default: OverridableFrontendPlugin<
|
||||
optional: true;
|
||||
}
|
||||
>;
|
||||
inputs: {};
|
||||
inputs: {
|
||||
[x: string]: ExtensionInput<
|
||||
ExtensionDataRef,
|
||||
{
|
||||
optional: boolean;
|
||||
singleton: boolean;
|
||||
}
|
||||
>;
|
||||
};
|
||||
kind: 'entity-card';
|
||||
name: 'members-list';
|
||||
params: {
|
||||
loader: () => Promise<JSX.Element>;
|
||||
filter?: string | EntityPredicate | ((entity: Entity) => boolean);
|
||||
@@ -104,13 +118,17 @@ const _default: OverridableFrontendPlugin<
|
||||
};
|
||||
}>;
|
||||
'entity-card:org/ownership': ExtensionDefinition<{
|
||||
kind: 'entity-card';
|
||||
name: 'ownership';
|
||||
config: {
|
||||
initialRelationAggregation: 'direct' | 'aggregated' | undefined;
|
||||
showAggregateMembersToggle: boolean | undefined;
|
||||
} & {
|
||||
filter: EntityPredicate | undefined;
|
||||
type: 'content' | 'summary' | 'info' | undefined;
|
||||
};
|
||||
configInput: {
|
||||
showAggregateMembersToggle?: boolean | undefined;
|
||||
initialRelationAggregation?: 'direct' | 'aggregated' | undefined;
|
||||
} & {
|
||||
filter?: EntityPredicate | undefined;
|
||||
type?: 'content' | 'summary' | 'info' | undefined;
|
||||
};
|
||||
@@ -137,7 +155,17 @@ const _default: OverridableFrontendPlugin<
|
||||
optional: true;
|
||||
}
|
||||
>;
|
||||
inputs: {};
|
||||
inputs: {
|
||||
[x: string]: ExtensionInput<
|
||||
ExtensionDataRef,
|
||||
{
|
||||
optional: boolean;
|
||||
singleton: boolean;
|
||||
}
|
||||
>;
|
||||
};
|
||||
kind: 'entity-card';
|
||||
name: 'ownership';
|
||||
params: {
|
||||
loader: () => Promise<JSX.Element>;
|
||||
filter?: string | EntityPredicate | ((entity: Entity) => boolean);
|
||||
|
||||
+47
-14
@@ -36,26 +36,59 @@ const EntityGroupProfileCard = EntityCardBlueprint.make({
|
||||
});
|
||||
|
||||
/** @alpha */
|
||||
const EntityMembersListCard = EntityCardBlueprint.make({
|
||||
const EntityMembersListCard = EntityCardBlueprint.makeWithOverrides({
|
||||
name: 'members-list',
|
||||
params: {
|
||||
filter: { kind: 'group' },
|
||||
loader: async () =>
|
||||
import('./components/Cards/Group/MembersList/MembersListCard').then(m =>
|
||||
compatWrapper(<m.MembersListCard />),
|
||||
),
|
||||
config: {
|
||||
schema: {
|
||||
initialRelationAggregation: z =>
|
||||
z.enum(['direct', 'aggregated']).optional(),
|
||||
showAggregateMembersToggle: z => z.boolean().optional(),
|
||||
},
|
||||
},
|
||||
factory(originalFactory, { config }) {
|
||||
return originalFactory({
|
||||
filter: { kind: 'group' },
|
||||
loader: async () =>
|
||||
import('./components/Cards/Group/MembersList/MembersListCard').then(m =>
|
||||
compatWrapper(
|
||||
<m.MembersListCard
|
||||
relationAggregation={config.initialRelationAggregation}
|
||||
showAggregateMembersToggle={config.showAggregateMembersToggle}
|
||||
/>,
|
||||
),
|
||||
),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
/** @alpha */
|
||||
const EntityOwnershipCard = EntityCardBlueprint.make({
|
||||
const EntityOwnershipCard = EntityCardBlueprint.makeWithOverrides({
|
||||
name: 'ownership',
|
||||
params: {
|
||||
filter: { kind: { $in: ['group', 'user'] } },
|
||||
loader: async () =>
|
||||
import('./components/Cards/OwnershipCard/OwnershipCard').then(m =>
|
||||
compatWrapper(<m.OwnershipCard />),
|
||||
),
|
||||
config: {
|
||||
schema: {
|
||||
initialRelationAggregation: z =>
|
||||
z.enum(['direct', 'aggregated']).optional(),
|
||||
showAggregateMembersToggle: z => z.boolean().optional(),
|
||||
},
|
||||
},
|
||||
factory(originalFactory, { config }) {
|
||||
return originalFactory({
|
||||
filter: { kind: { $in: ['group', 'user'] } },
|
||||
loader: async () =>
|
||||
import('./components/Cards/OwnershipCard/OwnershipCard').then(m =>
|
||||
compatWrapper(
|
||||
<m.OwnershipCard
|
||||
relationAggregation={config.initialRelationAggregation}
|
||||
// harmonize the exposed alpha endpoints, but keep the default behaviour
|
||||
hideRelationsToggle={
|
||||
config.showAggregateMembersToggle === undefined
|
||||
? undefined
|
||||
: !config.showAggregateMembersToggle
|
||||
}
|
||||
/>,
|
||||
),
|
||||
),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user