From 54b4e38f9645c09dbee07803768d5bbf35b2ce7b Mon Sep 17 00:00:00 2001 From: Joshua Arnold Date: Tue, 25 Jul 2023 10:32:47 -0400 Subject: [PATCH 01/25] fix(metadata): Disable updates to metadata --- .../metadata-instance-editor/Instance.js | 52 +- .../__tests__/Instance.test.js | 58 +- .../__snapshots__/Instance.test.js.snap | 1038 +++++++++++++++-- 3 files changed, 1047 insertions(+), 101 deletions(-) diff --git a/src/features/metadata-instance-editor/Instance.js b/src/features/metadata-instance-editor/Instance.js index 017e53fa05..d797f2897e 100644 --- a/src/features/metadata-instance-editor/Instance.js +++ b/src/features/metadata-instance-editor/Instance.js @@ -209,6 +209,8 @@ class Instance extends React.PureComponent { onSave, }: Props = this.props; const { data: currentData, errors, isCascadingEnabled, isCascadingOverwritten }: State = this.state; + const hasCascadePolicy = !!cascadePolicy?.id; + const hasCascadePermission = !hasCascadePolicy || (hasCascadePolicy && isCascadingPolicyApplicable); if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) { return; @@ -222,7 +224,7 @@ class Instance extends React.PureComponent { onSave( id, this.createJSONPatch(currentData, originalData), - isCascadingPolicyApplicable + hasCascadePermission ? { canEdit: cascadePolicy ? cascadePolicy.canEdit : false, id: cascadePolicy ? cascadePolicy.id : undefined, @@ -351,10 +353,10 @@ class Instance extends React.PureComponent { * @return {Object} - react title element */ getTitle(): React.Node { - const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props; + const { cascadePolicy = {}, hasError, template }: Props = this.props; const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES; - const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default'; + const type = cascadePolicy?.id ? 'cascade' : 'default'; return ( @@ -549,10 +551,10 @@ class Instance extends React.PureComponent { return this.canEdit() && isEditing; } - renderEditButton = () => { + renderEditButton = (canEditInstance: boolean) => { const { intl, isDirty }: Props = this.props; const { isBusy }: State = this.state; - const canEdit = this.canEdit(); + const canEdit = this.canEdit() && canEditInstance; const isEditing = this.isEditing(); const editClassName = classNames('metadata-instance-editor-instance-edit', { 'metadata-instance-editor-instance-is-editing': isEditing, @@ -579,7 +581,13 @@ class Instance extends React.PureComponent { }; render() { - const { cascadePolicy = {}, isDirty, isCascadingPolicyApplicable, isOpen, template }: Props = this.props; + const { + cascadePolicy = {}, + isDirty, + isCascadingPolicyApplicable = false, // does user have cascading policy permissions + isOpen, + template, + }: Props = this.props; const { fields = [] } = template; const { data, @@ -592,6 +600,9 @@ class Instance extends React.PureComponent { }: State = this.state; const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES; const isEditing = this.isEditing(); + const hasCascadePolicy = !!cascadePolicy?.id; + const hasCascadePermission = !hasCascadePolicy || (hasCascadePolicy && isCascadingPolicyApplicable); + const canEditInstance = !!(isEditing && hasCascadePermission); if (!template || isHidden(template)) { return null; @@ -608,7 +619,7 @@ class Instance extends React.PureComponent { [RESIN_TAG_TARGET]: 'metadata-card', }} hasStickyHeader - headerActionItems={this.renderEditButton()} + headerActionItems={this.renderEditButton(hasCascadePermission)} isBordered isOpen={isOpen} title={this.getTitle()} @@ -626,27 +637,26 @@ class Instance extends React.PureComponent {
- {isCascadingPolicyApplicable && ( - - )} + + {isProperties ? ( ) : ( { /> )}
- {isEditing && ( + {canEditInstance && (