-
{`${title} (${totalCount})`}
- {showCSVExport && (
-
+
+
+ {isBulkAssignModalVisible && (
+
)}
+
+
+
{`${title} (${totalCount})`}
+
+ {isSupervisor && isBulkAssignmentFFEnabled && (
+
+ )}
+ {showCSVExport && (
+
+ )}
+
+
+ {renderFilterPillButtonList()}
+
+
- {renderFilterPillButtonList()}
-
-
+
);
};
diff --git a/src/components/Table/TableQueue.module.scss b/src/components/Table/TableQueue.module.scss
index 0a240bfbb8c..0da067b63ac 100644
--- a/src/components/Table/TableQueue.module.scss
+++ b/src/components/Table/TableQueue.module.scss
@@ -26,6 +26,12 @@
justify-content: space-between;
align-items: flex-end;
}
+ .queueButtonWrapper {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+ align-items: flex-end;
+ }
.csvDownloadLink {
padding: 10px;
@@ -62,4 +68,4 @@
.pillButtonRow {
padding-left: 8px;
-}
\ No newline at end of file
+}
diff --git a/src/pages/Office/MoveQueue/MoveQueue.jsx b/src/pages/Office/MoveQueue/MoveQueue.jsx
index c4ba38e6677..ac091408682 100644
--- a/src/pages/Office/MoveQueue/MoveQueue.jsx
+++ b/src/pages/Office/MoveQueue/MoveQueue.jsx
@@ -32,6 +32,7 @@ import { isNullUndefinedOrWhitespace } from 'shared/utils';
import NotFound from 'components/NotFound/NotFound';
import { isBooleanFlagEnabled } from 'utils/featureFlags';
import handleQueueAssignment from 'utils/queues';
+import { elevatedPrivilegeTypes } from 'constants/userPrivileges';
export const columns = (moveLockFlag, isQueueManagementEnabled, showBranchFilter = true) => {
const cols = [
@@ -192,13 +193,15 @@ export const columns = (moveLockFlag, isQueueManagementEnabled, showBranchFilter
return cols;
};
-const MoveQueue = ({ isQueueManagementFFEnabled }) => {
+const MoveQueue = ({ isQueueManagementFFEnabled, userPrivileges, isBulkAssignmentFFEnabled }) => {
const navigate = useNavigate();
const { queueType } = useParams();
const [search, setSearch] = useState({ moveCode: null, dodID: null, customerName: null, paymentRequestCode: null });
const [searchHappened, setSearchHappened] = useState(false);
const [moveLockFlag, setMoveLockFlag] = useState(false);
-
+ const supervisor = userPrivileges
+ ? userPrivileges.some((p) => p.privilegeType === elevatedPrivilegeTypes.SUPERVISOR)
+ : false;
useEffect(() => {
const fetchData = async () => {
const lockedMoveFlag = await isBooleanFlagEnabled('move_lock');
@@ -343,6 +346,8 @@ const MoveQueue = ({ isQueueManagementFFEnabled }) => {
csvExportQueueFetcherKey="queueMoves"
sessionStorageKey={queueType}
key={queueType}
+ isSupervisor={supervisor}
+ isBulkAssignmentFFEnabled={isBulkAssignmentFFEnabled}
/>
);
diff --git a/src/pages/Office/PaymentRequestQueue/PaymentRequestQueue.jsx b/src/pages/Office/PaymentRequestQueue/PaymentRequestQueue.jsx
index dfdf09a0c67..a46518a2627 100644
--- a/src/pages/Office/PaymentRequestQueue/PaymentRequestQueue.jsx
+++ b/src/pages/Office/PaymentRequestQueue/PaymentRequestQueue.jsx
@@ -31,6 +31,7 @@ import NotFound from 'components/NotFound/NotFound';
import { isBooleanFlagEnabled } from 'utils/featureFlags';
import { DEFAULT_EMPTY_VALUE, PAYMENT_REQUEST_STATUS } from 'shared/constants';
import handleQueueAssignment from 'utils/queues';
+import { elevatedPrivilegeTypes } from 'constants/userPrivileges';
export const columns = (moveLockFlag, isQueueManagementEnabled, showBranchFilter = true) => {
const cols = [
@@ -190,12 +191,15 @@ export const columns = (moveLockFlag, isQueueManagementEnabled, showBranchFilter
return cols;
};
-const PaymentRequestQueue = ({ isQueueManagementFFEnabled }) => {
+const PaymentRequestQueue = ({ isQueueManagementFFEnabled, userPrivileges, isBulkAssignmentFFEnabled }) => {
const { queueType } = useParams();
const navigate = useNavigate();
const [search, setSearch] = useState({ moveCode: null, dodID: null, customerName: null, paymentRequestCode: null });
const [searchHappened, setSearchHappened] = useState(false);
const [moveLockFlag, setMoveLockFlag] = useState(false);
+ const supervisor = userPrivileges
+ ? userPrivileges.some((p) => p.privilegeType === elevatedPrivilegeTypes.SUPERVISOR)
+ : false;
useEffect(() => {
const fetchData = async () => {
@@ -328,6 +332,8 @@ const PaymentRequestQueue = ({ isQueueManagementFFEnabled }) => {
csvExportQueueFetcherKey="queuePaymentRequests"
sessionStorageKey={queueType}
key={queueType}
+ isSupervisor={supervisor}
+ isBulkAssignmentFFEnabled={isBulkAssignmentFFEnabled}
/>
);
diff --git a/src/pages/Office/ServicesCounselingQueue/ServicesCounselingQueue.jsx b/src/pages/Office/ServicesCounselingQueue/ServicesCounselingQueue.jsx
index 77d986fa43e..6518eda8080 100644
--- a/src/pages/Office/ServicesCounselingQueue/ServicesCounselingQueue.jsx
+++ b/src/pages/Office/ServicesCounselingQueue/ServicesCounselingQueue.jsx
@@ -428,7 +428,12 @@ export const closeoutColumns = (
return cols;
};
-const ServicesCounselingQueue = ({ userPrivileges, isQueueManagementFFEnabled, officeUser }) => {
+const ServicesCounselingQueue = ({
+ userPrivileges,
+ isQueueManagementFFEnabled,
+ officeUser,
+ isBulkAssignmentFFEnabled,
+}) => {
const { queueType } = useParams();
const { data, isLoading, isError } = useUserQueries();
@@ -663,6 +668,8 @@ const ServicesCounselingQueue = ({ userPrivileges, isQueueManagementFFEnabled, o
csvExportQueueFetcherKey="queueMoves"
sessionStorageKey={queueType}
key={queueType}
+ isSupervisor={supervisor}
+ isBulkAssignmentFFEnabled={isBulkAssignmentFFEnabled}
/>
);
@@ -690,6 +697,8 @@ const ServicesCounselingQueue = ({ userPrivileges, isQueueManagementFFEnabled, o
csvExportQueueFetcherKey="queueMoves"
sessionStorageKey={queueType}
key={queueType}
+ isSupervisor={supervisor}
+ isBulkAssignmentFFEnabled={isBulkAssignmentFFEnabled}
/>
);
diff --git a/src/pages/Office/index.jsx b/src/pages/Office/index.jsx
index 4ca83220d96..8ae42ba6af5 100644
--- a/src/pages/Office/index.jsx
+++ b/src/pages/Office/index.jsx
@@ -44,6 +44,7 @@ import withRouter from 'utils/routing';
import { OktaLoggedOutBanner, OktaNeedsLoggedOutBanner } from 'components/OktaLogoutBanner';
import SelectedGblocProvider from 'components/Office/GblocSwitcher/SelectedGblocProvider';
import MaintenancePage from 'pages/Maintenance/MaintenancePage';
+import { FEATURE_FLAG_KEYS } from 'shared/constants';
// Lazy load these dependencies (they correspond to unique routes & only need to be loaded when that URL is accessed)
const SignIn = lazy(() => import('pages/SignIn/SignIn'));
@@ -114,6 +115,7 @@ export class OfficeApp extends Component {
hqRoleFlag: !!props.hqRoleFlag,
gsrRoleFlag: undefined,
queueManagementFlag: undefined,
+ bulkAssignmentFlag: undefined,
};
}
@@ -158,6 +160,10 @@ export class OfficeApp extends Component {
this.setState({
queueManagementFlag: isQueueManagementFlagValue,
});
+ const isBulkAssignmentFlagValue = await isBooleanFlagEnabled(FEATURE_FLAG_KEYS.BULK_ASSIGNMENT);
+ this.setState({
+ bulkAssignmentFlag: isBulkAssignmentFlagValue,
+ });
} catch (error) {
retryPageLoading(error);
}
@@ -177,8 +183,17 @@ export class OfficeApp extends Component {
}
render() {
- const { hasError, error, info, oktaLoggedOut, oktaNeedsLoggedOut, hqRoleFlag, gsrRoleFlag, queueManagementFlag } =
- this.state;
+ const {
+ hasError,
+ error,
+ info,
+ oktaLoggedOut,
+ oktaNeedsLoggedOut,
+ hqRoleFlag,
+ gsrRoleFlag,
+ queueManagementFlag,
+ bulkAssignmentFlag,
+ } = this.state;
const {
activeRole,
officeUserId,
@@ -322,6 +337,7 @@ export class OfficeApp extends Component {