diff --git a/server/src/main/resources/db/dev/R__Load_testing_data.sql b/server/src/main/resources/db/dev/R__Load_testing_data.sql index 2aa8a6afc..99e28dfb3 100644 --- a/server/src/main/resources/db/dev/R__Load_testing_data.sql +++ b/server/src/main/resources/db/dev/R__Load_testing_data.sql @@ -1298,22 +1298,32 @@ INSERT INTO review_periods VALUES ('12345678-e29c-4cf4-9ea4-6baa09405c58', 'Review Period 2', 'PLANNING', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-09-10 06:00:00', '2024-09-11 06:00:00', '2024-09-12 06:00:00', '2024-01-01 06:00:00', '2024-08-31 06:00:00'); +INSERT INTO review_periods +(id, name, review_status, review_template_id, self_review_template_id, launch_date, self_review_close_date, close_date, period_start_date, period_end_date) +VALUES + ('12345678-e29c-4cf4-9ea4-6baa09405c59', 'Review Period 3', 'CLOSED', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-10-01 06:00:00', '2024-10-02 06:00:00', '2024-10-03 06:00:00', '2024-01-01 06:00:00', '2024-09-30 06:00:00'); + +INSERT INTO review_periods +(id, name, review_status, review_template_id, self_review_template_id, launch_date, self_review_close_date, close_date, period_start_date, period_end_date) +VALUES + ('12345678-e29c-4cf4-9ea4-6baa09405c5a', 'Review Period 4', 'CLOSED', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-10-01 06:00:00', '2024-10-02 06:00:00', '2024-10-03 06:00:00', '2024-01-01 06:00:00', '2024-09-30 06:00:00'); + -- CAE - Self-Review feedback request, Creator: Big Boss INSERT INTO feedback_requests (id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id) VALUES -('98390c09-7121-110a-bfee-9380a470a7ef', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'c7406157-a38f-4d48-aaed-04018d846727', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57'); +('98390c09-7121-110a-bfee-9380a470a7ef', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'c7406157-a38f-4d48-aaed-04018d846727', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-10-04', '2024-10-30', '2024-10-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c59'); -- CAE - Review feedback request, Creator: Big Boss INSERT INTO feedback_requests (id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id) VALUES -('98390c09-7121-110a-bfee-9380a470a7f0', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57'); +('98390c09-7121-110a-bfee-9380a470a7f0', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-10-04', '2024-10-30', '2024-10-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c59'); INSERT INTO feedback_requests (id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id) VALUES -('98390c09-7121-110a-bfee-9380a470a7f3', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57'); +('98390c09-7121-110a-bfee-9380a470a7f3', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-10-04', '2024-10-30', '2024-10-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c59'); INSERT INTO feedback_requests (id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id) @@ -1344,7 +1354,7 @@ VALUES INSERT INTO feedback_requests (id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id) VALUES -('98390c09-7121-110a-bfee-9380a470a7f2', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '1c8bc142-c447-4889-986e-42ab177da683', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57'); +('98390c09-7121-110a-bfee-9380a470a7f2', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '1c8bc142-c447-4889-986e-42ab177da683', '2024-10-04', '2024-10-30', '2024-10-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c59'); ---- Creator: Big Boss INSERT INTO feedback_requests diff --git a/web-ui/src/components/reviews/periods/ReviewPeriods.jsx b/web-ui/src/components/reviews/periods/ReviewPeriods.jsx index 71718935a..93bec7da3 100644 --- a/web-ui/src/components/reviews/periods/ReviewPeriods.jsx +++ b/web-ui/src/components/reviews/periods/ReviewPeriods.jsx @@ -99,11 +99,15 @@ const ReviewStatus = { UNKNOWN: 'UNKNOWN' }; +// mode will be either "self" or undefined. +const selfReviewMode = "self"; + const ReviewPeriods = ({ onPeriodSelected, mode }) => { const { state, dispatch } = useContext(AppContext); const [canSave, setCanSave] = useState(false); const [loading, setLoading] = useState(false); + const [periods, setPeriods] = useState([]); const [periodToAdd, setPeriodToAdd] = useState({ name: '', reviewStatus: ReviewStatus.PLANNING, @@ -119,9 +123,15 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => { const currentUserId = selectCurrentUserId(state); const csrf = selectCsrfToken(state); - const periods = selectReviewPeriods(state); const userProfile = selectUserProfile(state); + useEffect(() => { + setPeriods(selectReviewPeriods(state) + .filter((r) => mode !== selfReviewMode || + r.reviewStatus === ReviewStatus.OPEN || + r.reviewStatus === ReviewStatus.CLOSED)); + }, [state, mode]); + useQueryParameters([ { name: 'add', @@ -255,6 +265,7 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => { useEffect(() => { const getSelfReviews = async () => { + setLoading(true); let reviews = {}; Promise.all( periods.map(async period => { @@ -280,7 +291,17 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => { }); } }) - ).then(() => setSelfReviews(reviews)); + ).then(() => { + // Now that we have the reviews loaded, filter out closed + // self-review periods in which the current user is not involved. + if (mode == selfReviewMode) { + setPeriods(periods.filter((r) => + r.reviewStatus !== ReviewStatus.CLOSED || + !!reviews[r.id])); + } + setSelfReviews(reviews); + setLoading(false); + }); }; if ( csrf && @@ -291,18 +312,17 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => { ) { getSelfReviews(); } - }, [csrf, periods, currentUserId, selfReviews]); + }, [csrf, periods, currentUserId, selfReviews ]); const onPeriodClick = useCallback( id => { const status = selectReviewPeriod(state, id)?.reviewStatus; switch (status) { case ReviewStatus.PLANNING: - onPeriodSelected(id); - break; case ReviewStatus.AWAITING_APPROVAL: - // TODO: Check for the required permission. - onPeriodSelected(id); + if (mode !== selfReviewMode) { + onPeriodSelected(id); + } break; case ReviewStatus.OPEN: onPeriodSelected(id); diff --git a/web-ui/src/components/settings/types/boolean.jsx b/web-ui/src/components/settings/types/boolean.jsx index 596d2c100..9c724bcdf 100644 --- a/web-ui/src/components/settings/types/boolean.jsx +++ b/web-ui/src/components/settings/types/boolean.jsx @@ -15,7 +15,8 @@ import { createLabelId } from '../../../helpers/strings.js'; */ const SettingsBoolean = ({ name, description, value, handleChange }) => { const labelId = createLabelId(name); - + const checked = + typeof(value) === 'boolean' ? value : value.toLowerCase() == "true"; return (
diff --git a/web-ui/src/pages/SettingsPage.jsx b/web-ui/src/pages/SettingsPage.jsx index 8540da254..f31d420ff 100644 --- a/web-ui/src/pages/SettingsPage.jsx +++ b/web-ui/src/pages/SettingsPage.jsx @@ -46,7 +46,14 @@ const SettingsPage = () => { if (allOptions) { // Sort the options by category, store them, and upate the state. setSettingsControls( - allOptions.sort((l, r) => l.category.localeCompare(r.category))); + allOptions.sort((l, r) => { + if (l.category === r.category) { + return l.name.localeCompare(r.name); + } else { + return l.category.localeCompare(r.category); + } + }) + ); } }; if (csrf) { @@ -124,7 +131,7 @@ const SettingsPage = () => { for(let key of Object.keys(handlers)) { const setting = handlers[key].setting; // The settings controller does not allow blank values. - if (setting && setting.value) { + if (setting?.name && `${setting.value}` != "") { let res; if (setting.id) { res = await putOption({ name: setting.name, @@ -133,7 +140,7 @@ const SettingsPage = () => { res = await postOption({ name: setting.name, value: setting.value }, csrf); if (res?.payload?.data) { - setting.exists = true; + setting.id = res.payload.data.id; } } if (res?.error) { @@ -147,6 +154,8 @@ const SettingsPage = () => { if (res?.payload?.data) { saved++; } + } else { + console.warn(`WARNING: ${setting.name} not sent to the server`); } } diff --git a/web-ui/src/pages/__snapshots__/SettingsPage.test.jsx.snap b/web-ui/src/pages/__snapshots__/SettingsPage.test.jsx.snap index f0c2a8c9d..ca7429397 100644 --- a/web-ui/src/pages/__snapshots__/SettingsPage.test.jsx.snap +++ b/web-ui/src/pages/__snapshots__/SettingsPage.test.jsx.snap @@ -38,10 +38,9 @@ exports[`SettingsPage > renders correctly 1`] = ` class="MuiSwitch-root MuiSwitch-sizeMedium settings-control css-julti5-MuiSwitch-root" > renders correctly 1`] = ` class="settings-type" >

@@ -84,10 +83,9 @@ exports[`SettingsPage > renders correctly 1`] = ` > @@ -95,12 +93,12 @@ exports[`SettingsPage > renders correctly 1`] = ` class="settings-type" >

- Other Setting + String Setting

@@ -111,9 +109,10 @@ exports[`SettingsPage > renders correctly 1`] = ` >