+const renderPermissionLevel = (dispatch: Dispatch, link: LinkResource, resource: Resource) => {
+ return <Typography noWrap>
+ {formatPermissionLevel(link.name as PermissionLevel)}
+ <IconButton onClick={() => dispatch<any>(openEditPermissionLevelDialog(link.uuid, resource.uuid))}>
+ <RenameIcon />
+ </IconButton>
+ </Typography>;
+}
+
+export const ResourceLinkHeadPermissionLevel = connect(
+ (state: RootState, props: { uuid: string }) => {
+ const link = getResource<LinkResource>(props.uuid)(state.resources);
+ const resource = getResource<Resource>(link?.headUuid || '')(state.resources);
+
+ return {
+ link: link || { uuid: '', name: '', kind: ResourceKind.NONE },
+ resource: resource || { uuid: '', kind: ResourceKind.NONE }
+ };
+ })((props: { link: LinkResource, resource: Resource } & DispatchProp<any>) =>
+ renderPermissionLevel(props.dispatch, props.link, props.resource));
+
+export const ResourceLinkTailPermissionLevel = connect(
+ (state: RootState, props: { uuid: string }) => {
+ const link = getResource<LinkResource>(props.uuid)(state.resources);
+ const resource = getResource<Resource>(link?.tailUuid || '')(state.resources);
+
+ return {
+ link: link || { uuid: '', name: '', kind: ResourceKind.NONE },
+ resource: resource || { uuid: '', kind: ResourceKind.NONE }
+ };
+ })((props: { link: LinkResource, resource: Resource } & DispatchProp<any>) =>
+ renderPermissionLevel(props.dispatch, props.link, props.resource));
+
+// Displays resource type and display name without link
+export const ResourceLabel = connect(
+ (state: RootState, props: { uuid: string }) => {
+ const resource = getResource<Resource>(props.uuid)(state.resources);
+ return {
+ item: resource || { uuid: '', kind: ResourceKind.NONE }
+ };
+ })((props: { item: Resource } & DispatchProp<any>) =>
+ renderResource(props.dispatch, props.item));
+