Skip to content

Commit

Permalink
resolve comments
Browse files Browse the repository at this point in the history
  • Loading branch information
lewischen-aot committed Feb 7, 2025
1 parent 925001a commit f49f287
Show file tree
Hide file tree
Showing 14 changed files with 58 additions and 65 deletions.
12 changes: 3 additions & 9 deletions sources/packages/web/src/components/common/OfferingForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<span>
<v-btn
v-if="formMode === OfferingFormModes.Editable"
:disabled="disabled || isReadOnlyUser($props.locationId)"
:disabled="disabled"
variant="elevated"
data-cy="offeringValidationButton"
color="primary"
Expand All @@ -29,7 +29,7 @@
>Validate
</v-btn>
<v-btn
:disabled="disabled || isReadOnlyUser($props.locationId)"
:disabled="disabled"
class="ml-2"
variant="elevated"
data-cy="offeringSubmitButton"
Expand All @@ -47,7 +47,7 @@
<script lang="ts">
import { FormIOForm, OfferingFormModel, OfferingFormModes } from "@/types";
import { defineComponent, PropType, computed, ref, watchEffect } from "vue";
import { useInstitutionAuth, useOffering } from "@/composables";
import { useOffering } from "@/composables";
import {
EducationProgramOfferingAPIInDTO,
EducationProgramOfferingAPIOutDTO,
Expand Down Expand Up @@ -94,13 +94,8 @@ export default defineComponent({
required: true,
default: false,
},
locationId: {
type: Number,
required: false,
},
},
setup(props, context) {
const { isReadOnlyUser } = useInstitutionAuth();
const offeringData = ref(
{} as EducationProgramOfferingAPIOutDTO | OfferingFormModel,
);
Expand Down Expand Up @@ -148,7 +143,6 @@ export default defineComponent({
};
return {
isReadOnlyUser,
submitOffering,
formData,
cancel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
:formMode="formMode"
:processing="processing"
:data="data"
:locationId="$props.locationId"
@loaded="formLoaded"
@validateOffering="validateOffering"
@saveOffering="saveOffering"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,8 @@
/>
<v-divider-vertical-opaque class="mx-2 my-0" />
<header-title-value title="Institution name"
><template #value>
<span v-if="isReadOnlyUser($props.locationId)">
{{ headerDetails.institutionName }}
</span>
<span v-else class="link-primary" @click="goToInstitutionProfile()">
><template #value
><span class="link-primary" @click="goToInstitutionProfile()">
{{ headerDetails.institutionName }}
</span>
</template></header-title-value
Expand Down Expand Up @@ -76,7 +73,7 @@ import {
ProgramOfferingApprovalLabels,
} from "@/types";
import HeaderTitleValue from "@/components/generic/HeaderTitleValue.vue";
import { useFormatters, useInstitutionAuth } from "@/composables";
import { useFormatters } from "@/composables";
import { computed, defineComponent } from "vue";
import { useRouter } from "vue-router";
import {
Expand All @@ -93,15 +90,10 @@ export default defineComponent({
required: true,
default: {} as ProgramOfferingHeader,
},
locationId: {
type: Number,
required: false,
},
},
setup(props) {
const router = useRouter();
const { dateOnlyLongString } = useFormatters();
const { isReadOnlyUser } = useInstitutionAuth();
const showApprovalDetails = computed(
() =>
props.headerDetails.assessedBy &&
Expand Down Expand Up @@ -154,7 +146,6 @@ export default defineComponent({
dateOnlyLongString,
approvalLabel,
showApprovalDetails,
isReadOnlyUser,
};
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
@primaryClick="submit"
primaryLabel="Submit update"
@secondaryClick="cancel"
:disablePrimaryButton="isReadOnlyUser($props.locationId)"
/> </template
></formio-container>
</template>
Expand All @@ -22,7 +21,6 @@ import {
ScholasticStandingSubmittedDetailsAPIOutDTO,
} from "@/services/http/dto";
import { FormIOForm } from "@/types";
import { useInstitutionAuth } from "@/composables";
interface ScholasticStanding
extends ScholasticStandingSubmittedDetailsAPIOutDTO {
Expand All @@ -49,13 +47,8 @@ export default defineComponent({
required: true,
default: false,
},
locationId: {
type: Number,
required: false,
},
},
setup(props, context) {
const { isReadOnlyUser } = useInstitutionAuth();
const data = ref(
{} as ScholasticStanding | ScholasticStandingBeforeSubmission,
);
Expand All @@ -80,7 +73,7 @@ export default defineComponent({
context.emit("cancel");
};
return { data, submitted, cancel, isReadOnlyUser };
return { data, submitted, cancel };
},
});
</script>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<v-row :justify="justify" class="mt-2 mb-1">
<v-row :justify="justify" class="mt-2 mb-1" v-if="showButtons">
<v-btn
:disabled="processing"
:color="secondaryButtonColor"
Expand Down Expand Up @@ -31,6 +31,11 @@ import { defineComponent, PropType } from "vue";
export default defineComponent({
emits: ["primaryClick", "secondaryClick"],
props: {
showButtons: {
type: Boolean,
required: false,
default: true,
},
primaryLabel: {
type: String,
required: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,14 +115,13 @@ export default defineComponent({
const locationAuthorization = userDetails.authorizations.find(
(authorization) => authorization.location?.id === locationId,
);
if (locationAuthorization?.authType.type === LocationUserAccess.User) {
return LocationUserAccess.User;
} else if (
locationAuthorization?.authType.type === LocationUserAccess.ReadOnlyUser
) {
return LocationUserAccess.ReadOnlyUser;
} else {
return LocationUserAccess.NoAccess;
switch (locationAuthorization?.authType.type) {
case LocationUserAccess.User:
return LocationUserAccess.User;
case LocationUserAccess.ReadOnlyUser:
return LocationUserAccess.ReadOnlyUser;
default:
return LocationUserAccess.NoAccess;
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,15 @@ export default defineComponent({
return true;
};
// UI validation to ensure that the user has access to at least
// on location when admin is not selected.
// one location when admin is not selected.
const hasLocationAuthorizationValidationRule = (): boolean | string => {
if (formModel.isAdmin) {
return true;
}
const hasSomeLocationAccess = formModel.locationAuthorizations.some(
(locationAccess) =>
locationAccess.userAccess === LocationUserAccess.User,
locationAccess.userAccess === LocationUserAccess.User ||
locationAccess.userAccess === LocationUserAccess.ReadOnlyUser,
);
if (!hasSomeLocationAccess) {
return "Select at least one location for non-admin users.";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,13 @@ export function useInstitutionAuth(rootStore?: Store<any>) {
() => store.state.institution.institutionState?.isBCPublic,
);

const isReadOnlyUser = (locationId?: number) => {
if (!locationId) return true;
const isReadOnlyUser = (locationId: number) => {
if (store.state.institution.userState.isAdmin) {
return false;
}
return store.state.institution.authorizationsState?.authorizations.some(
(auth: InstitutionUserAuthRolesAndLocation) =>
auth.locationId?.toString() === locationId.toString() &&
auth.locationId === +locationId &&
auth.userType === InstitutionUserTypes.readOnlyUser,
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</template>
<scholastic-standing-form
:initialData="initialData"
:readOnly="false"
:readOnly="isReadOnlyUser(locationId)"
@submit="submit"
:processing="processing"
@cancel="goBack"
Expand All @@ -27,7 +27,7 @@ import {
INVALID_OPERATION_IN_THE_CURRENT_STATUS,
ScholasticStandingDataAPIInDTO,
} from "@/services/http/dto/ScholasticStanding.dto";
import { useFormatters, useSnackBar } from "@/composables";
import { useFormatters, useInstitutionAuth, useSnackBar } from "@/composables";
import { ASSESSMENT_ALREADY_IN_PROGRESS } from "@/services/http/dto/Assessment.dto";
import { APPLICATION_CHANGE_NOT_ELIGIBLE } from "@/constants";
import { ScholasticStandingService } from "@/services/ScholasticStandingService";
Expand All @@ -51,6 +51,7 @@ export default defineComponent({
setup(props) {
const router = useRouter();
const { dateOnlyLongString } = useFormatters();
const { isReadOnlyUser } = useInstitutionAuth();
const initialData = ref({} as ActiveApplicationDataAPIOutDTO);
const snackBar = useSnackBar();
const processing = ref(false);
Expand Down Expand Up @@ -135,6 +136,7 @@ export default defineComponent({
goBackRouteParams,
processing,
goBack,
isReadOnlyUser,
};
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@
:routeLocation="goBackRouteParams"
/>
</template>
<scholastic-standing-form
:initialData="initialData"
:readOnly="true"
:locationId="$props.locationId"
/>
<scholastic-standing-form :initialData="initialData" :readOnly="true" />
</full-page-container>
</template>
<script lang="ts">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@
}"
subTitle="View Financial Aid Application"
><template #buttons>
<v-menu
v-if="initialData.applicationCOEStatus === COEStatus.required"
>
<v-menu v-if="showApplicationActions">
<template v-slot:activator="{ props }">
<v-btn
color="primary"
Expand All @@ -30,11 +28,7 @@
color="primary"
>
<template v-for="(item, index) in items" :key="index">
<v-list-item
:value="index"
@click="item.command"
:disabled="isReadOnlyUser($props.locationId)"
>
<v-list-item :value="index" @click="item.command">
<v-list-item-title>
<span class="label-bold">{{ item.label }}</span>
</v-list-item-title>
Expand Down Expand Up @@ -71,7 +65,7 @@
</template>
<script lang="ts">
import { useRouter } from "vue-router";
import { onMounted, ref, watch, defineComponent } from "vue";
import { onMounted, ref, watch, defineComponent, computed } from "vue";
import { InstitutionRoutesConst } from "@/constants/routes/RouteConstants";
import { ConfirmationOfEnrollmentService } from "@/services/ConfirmationOfEnrollmentService";
import {
Expand Down Expand Up @@ -133,6 +127,12 @@ export default defineComponent({
{} as ModalDialog<ApproveConfirmEnrollmentModel | boolean>,
);
const showApplicationActions = computed(
() =>
initialData.value.applicationCOEStatus === COEStatus.required &&
!isReadOnlyUser(props.locationId),
);
const loadInitialData = async () => {
initialData.value =
await ConfirmationOfEnrollmentService.shared.getApplicationForCOE(
Expand Down Expand Up @@ -269,6 +269,7 @@ export default defineComponent({
InstitutionRoutesConst,
confirmCOEModal,
BannerTypes,
showApplicationActions,
};
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,12 @@ import {
OfferingStatus,
} from "@/types";
import { InstitutionRoutesConst } from "@/constants/routes/RouteConstants";
import { ModalDialog, useFormioUtils, useSnackBar } from "@/composables";
import {
ModalDialog,
useFormioUtils,
useInstitutionAuth,
useSnackBar,
} from "@/composables";
import {
EducationProgramOfferingAPIInDTO,
EducationProgramOfferingBasicDataAPIInDTO,
Expand Down Expand Up @@ -119,6 +124,7 @@ export default defineComponent({
const router = useRouter();
const snackBar = useSnackBar();
const { excludeExtraneousValues } = useFormioUtils();
const { isReadOnlyUser } = useInstitutionAuth();
const processing = ref(false);
const formMode = ref(OfferingFormModes.Readonly);
const items = [
Expand Down Expand Up @@ -170,7 +176,11 @@ export default defineComponent({
props.programId,
props.offeringId,
);
if (isReadOnlyUser(props.locationId)) {
// If user is readonly, set form mode to readonly.
formMode.value = OfferingFormModes.Readonly;
return;
}
let mode = OfferingFormModes.Readonly;
const isReadonly = hasReadonlyStatus(programOffering.offeringStatus);
if (!isReadonly) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
primaryLabel="Submit"
@primaryClick="submit"
@secondaryClick="goBack"
:disablePrimaryButton="isReadOnlyUser($props.locationId)"
/> </template
></formio-container>
</full-page-container>
Expand Down Expand Up @@ -100,7 +99,8 @@ export default defineComponent({
isReadonly:
isAESTUser.value ||
!educationProgram.isActive ||
educationProgram.isExpired,
educationProgram.isExpired ||
isReadOnlyUser(props.locationId),
};
} else {
// Initialize programData with institution profile data.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
primaryLabel="Submit requested change"
@primaryClick="submit"
@secondaryClick="cancel"
:disablePrimaryButton="isReadOnlyUser($props.locationId)"
:showButtons="!isReadOnlyUser(locationId)"
/>
</request-a-change-form>
</full-page-container>
Expand Down

0 comments on commit f49f287

Please sign in to comment.