filegrc 0.13.1 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -2
- package/src/collection-review.js +28 -8
- package/src/git.js +1970 -794
- package/src/web.js +14 -3
package/src/web.js
CHANGED
|
@@ -938,15 +938,26 @@ function openCollectionReviewDialog(type) {
|
|
|
938
938
|
const sourceType = v4 ? "component" : "system";
|
|
939
939
|
const systems = resourcesOfType(sourceType).filter(({ record }) => record.status === "active");
|
|
940
940
|
const allowedDecisions = configuration.decisions || ["complete"];
|
|
941
|
-
const
|
|
942
|
-
|
|
941
|
+
const priorDecision = assessment.review?.decision;
|
|
942
|
+
const priorAuthoritativeSourceId = assessment.review?.authoritativeComponentId || assessment.review?.authoritativeSystemId || null;
|
|
943
|
+
const priorAuthoritativeSourceActive = priorDecision !== "externally-managed"
|
|
944
|
+
|| systems.some(({ record }) => record.id === priorAuthoritativeSourceId);
|
|
945
|
+
const priorDecisionStillValid = allowedDecisions.includes(priorDecision)
|
|
946
|
+
&& priorAuthoritativeSourceActive
|
|
947
|
+
&& (assessment.recordCount ? priorDecision !== "zero-population" : priorDecision !== "complete");
|
|
948
|
+
const preservedAuthoritativeSourceId = priorDecisionStillValid && priorDecision === "externally-managed"
|
|
949
|
+
? priorAuthoritativeSourceId
|
|
950
|
+
: null;
|
|
951
|
+
const defaultDecision = priorDecisionStillValid
|
|
952
|
+
? priorDecision
|
|
953
|
+
: !assessment.recordCount && allowedDecisions.includes("zero-population") ? "zero-population" : allowedDecisions[0];
|
|
943
954
|
const decisions = allowedDecisions.map((decision) => (
|
|
944
955
|
'<option value="' + esc(decision) + '" ' + (defaultDecision === decision ? "selected" : "") + '>' + esc(properCase(decision)) + '</option>'
|
|
945
956
|
)).join("");
|
|
946
957
|
const dialog = document.createElement("dialog");
|
|
947
958
|
dialog.className = "commit-dialog event-dialog collection-review-dialog";
|
|
948
959
|
dialog.setAttribute("aria-labelledby", "collection-review-dialog-title");
|
|
949
|
-
dialog.innerHTML = '<form><div class="dialog-head"><div><p class="kicker">Scope confirmation</p><h2 id="collection-review-dialog-title">Confirm ' + esc(configuration.title.toLowerCase()) + '</h2></div><button type="button" class="icon-button" aria-label="Close">×</button></div><p>' + esc(configuration.description) + '</p><section class="event-dialog-steps collection-review-checks"><strong>Before confirming</strong><ul>' + configuration.reviewPoints.map((point) => '<li>' + esc(point) + '</li>').join("") + '</ul></section><div class="form-grid"><label><span>Conclusion</span><select name="decision" required>' + decisions + '</select></label><label><span>Reviewer</span><select name="reviewerId" required><option value="">Select</option>' + people.map(({ record }) => '<option value="' + esc(record.id) + '" ' + ((assessment.review?.reviewedByIds || []).includes(record.id) ? "selected" : "") + '>' + esc(record.title) + '</option>').join("") + '</select></label><label><span>Reviewed on</span><input name="reviewedOn" type="date" required value="' + esc(
|
|
960
|
+
dialog.innerHTML = '<form><div class="dialog-head"><div><p class="kicker">Scope confirmation</p><h2 id="collection-review-dialog-title">Confirm ' + esc(configuration.title.toLowerCase()) + '</h2></div><button type="button" class="icon-button" aria-label="Close">×</button></div><p>' + esc(configuration.description) + '</p><section class="event-dialog-steps collection-review-checks"><strong>Before confirming</strong><ul>' + configuration.reviewPoints.map((point) => '<li>' + esc(point) + '</li>').join("") + '</ul></section><div class="form-grid"><label><span>Conclusion</span><select name="decision" required>' + decisions + '</select></label><label><span>Reviewer</span><select name="reviewerId" required><option value="">Select</option>' + people.map(({ record }) => '<option value="' + esc(record.id) + '" ' + ((assessment.review?.reviewedByIds || []).includes(record.id) ? "selected" : "") + '>' + esc(record.title) + '</option>').join("") + '</select></label><label><span>Reviewed on</span><input name="reviewedOn" type="date" required value="' + esc(currentDate()) + '"></label><label data-authoritative-system><span>Authoritative ' + (v4 ? "Component" : "System") + '</span><select name="authoritativeSourceId"><option value="">Select</option>' + systems.map(({ record }) => '<option value="' + esc(record.id) + '" ' + (preservedAuthoritativeSourceId === record.id ? "selected" : "") + '>' + esc(record.title) + '</option>').join("") + '</select></label><label class="full"><span>Review notes</span><textarea name="rationale" rows="3" required placeholder="Note what you confirmed and any scope decision that needs context.">' + esc(assessment.review?.rationale || "") + '</textarea></label></div><div class="workflow-preview"><strong>What this saves</strong><p>Confirm ' + assessment.recordCount + ' current ' + esc(pluralize("record", assessment.recordCount)) + '. If the collection or material scope changes, FileGRC will ask for another review.</p></div><div class="dialog-error" role="alert"></div><div class="dialog-actions"><span class="save-status review-save-status" role="status" aria-live="polite"></span><button type="button" class="button" data-event="cancel">Cancel</button><button type="submit" class="button primary">Confirm and save</button></div></form>';
|
|
950
961
|
document.body.append(dialog);
|
|
951
962
|
dialog.showModal();
|
|
952
963
|
const form = dialog.querySelector("form");
|