* Add additional test roles to example user * Add session storage and role to user indicator * Update example user provider * Added selection dialog to overlays and implemented for operator status * Display role in user indicator * Updates to broadcast channel lifecycle * Update comment * Comment width * UserAPI role updates and UserIndicator improvement * Moved prompt to UserIndicator * Reconnect channel on error and UserIndicator updates * Updates to status api canPRovideStatusForRole * Cleanup * Store status roles in an array instead of a singular value * Added success notification and cleanup * Lint * Removed unused role param from status api call * Remove default status role from example user plugin * Removed status.getStatusRoleForCurrentUser * Cleanup * Cleanup * Moved roleChannel to private field * Separated input value from active role value * More flight like status role names and parameter names * Update statusRole parameter name * Update default selection for roles if input is not chosen * Update OperatorStatusIndicator install to hide if an observer * console.log * Return null instead of undefined * Remove unneccesary filter on allRoles * refactor: format with prettier * Undid merge error * Merge conflict extra line * Copyright statement * RoleChannelProvider to RoleChannel * Throw error on no provider * Change RoleChannel to ActiveRoleSynchronizer and update method calls to match * iconClass to alert * Add role selection step to beforeEach * example-role to flight * Dismiss overlay from exampleUser plugin which affected menu api positioning --------- Co-authored-by: Scott Bell <scott@traclabs.com>
38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
import { ACTIVE_ROLE_BROADCAST_CHANNEL_NAME } from './constants';
|
|
|
|
class ActiveRoleSynchronizer {
|
|
#roleChannel;
|
|
|
|
constructor(openmct) {
|
|
this.openmct = openmct;
|
|
this.#roleChannel = new BroadcastChannel(ACTIVE_ROLE_BROADCAST_CHANNEL_NAME);
|
|
this.setActiveRoleFromChannelMessage = this.setActiveRoleFromChannelMessage.bind(this);
|
|
|
|
this.subscribeToRoleChanges(this.setActiveRoleFromChannelMessage);
|
|
}
|
|
subscribeToRoleChanges(callback) {
|
|
this.#roleChannel.addEventListener('message', callback);
|
|
}
|
|
unsubscribeFromRoleChanges(callback) {
|
|
this.#roleChannel.removeEventListener('message', callback);
|
|
}
|
|
|
|
setActiveRoleFromChannelMessage(event) {
|
|
const role = event.data;
|
|
this.openmct.user.setActiveRole(role);
|
|
}
|
|
broadcastNewRole(role) {
|
|
if (!this.#roleChannel.name) {
|
|
return false;
|
|
}
|
|
|
|
this.#roleChannel.postMessage(role);
|
|
}
|
|
destroy() {
|
|
this.unsubscribeFromRoleChanges(this.setActiveRoleFromChannelMessage);
|
|
this.#roleChannel.close();
|
|
}
|
|
}
|
|
|
|
export default ActiveRoleSynchronizer;
|