-
{channel.name}
- {channelWithStatus.isActivePublisher &&
Status: {channelWithStatus.isActivePublisher ? 'Active' : 'Inactive'}
}
+
+
+ {isFetching ?
: channels.length === 0 ? (
+
+
+
No channels found
+
Get started by creating your first channel.
+
-
- );
- })}
-
- >
+
+ ) : (
+
+ )}
+
+ {isCreateChannelModalOpened && (
+
+ )}
+
);
-}
+};
diff --git a/src/views/ChannelList/channel-publishing-state-indicator.tsx b/src/views/ChannelList/channel-publishing-state-indicator.tsx
new file mode 100644
index 0000000..72b159b
--- /dev/null
+++ b/src/views/ChannelList/channel-publishing-state-indicator.tsx
@@ -0,0 +1,9 @@
+/**
+ * Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
+ */
+import {DataRowType} from 'components/table';
+import PublishingStateIndicator from 'components/indicator-component/publishing-state-indicator';
+
+export const ChannelPublishingStateIndicator = (row?: DataRowType) => (
+
+);
diff --git a/src/views/ChannelList/columns-config.tsx b/src/views/ChannelList/columns-config.tsx
new file mode 100644
index 0000000..c6482c3
--- /dev/null
+++ b/src/views/ChannelList/columns-config.tsx
@@ -0,0 +1,5 @@
+/**
+ * Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
+ */
+
+export {columns} from './columns-data';
diff --git a/src/views/channels/columns-config.tsx b/src/views/ChannelList/columns-data.tsx
similarity index 78%
rename from src/views/channels/columns-config.tsx
rename to src/views/ChannelList/columns-data.tsx
index 547303a..58a19cd 100644
--- a/src/views/channels/columns-config.tsx
+++ b/src/views/ChannelList/columns-data.tsx
@@ -2,14 +2,12 @@
* Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
*/
import {faEllipsisV} from '@fortawesome/free-solid-svg-icons';
-import {CellType, ColumnsType, DataRowType} from 'components/table';
+import {CellType, ColumnsType} from 'components/table';
import {ChannelIconMenu} from 'components/channel-icon-menu';
-import {IconMenuPosition} from 'components/icon-menu/icon-menu';
-import PublishingStateIndicator from 'components/indicator-component/publishing-state-indicator';
+import {IconMenuPosition} from 'components/icon-menu/types';
+import {ChannelPublishingStateIndicator} from './channel-publishing-state-indicator';
import {theme} from 'theme';
-const ChannelPublishingStateIndicator = (row?: DataRowType) =>
;
-
export const columns: ColumnsType = {
indicator: {
title: '',
diff --git a/src/views/channels/create-channel/create-channel-modal.tsx b/src/views/ChannelList/create-channel/create-channel-modal.tsx
similarity index 88%
rename from src/views/channels/create-channel/create-channel-modal.tsx
rename to src/views/ChannelList/create-channel/create-channel-modal.tsx
index 03a2138..b524fc8 100644
--- a/src/views/channels/create-channel/create-channel-modal.tsx
+++ b/src/views/ChannelList/create-channel/create-channel-modal.tsx
@@ -1,7 +1,7 @@
/**
* Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
*/
-import {ChangeEvent, useState} from 'react';
+import React, {ChangeEvent, useState} from 'react';
import {faQuestionCircle} from '@fortawesome/free-solid-svg-icons';
import LoggerFactory from 'services/logger/LoggerFactory';
@@ -11,8 +11,8 @@ import {transformToPortalError} from 'utility/error-handler';
import {createChannelErrorMessages} from 'constants/error-messages';
import {documentationLinks} from 'constants/links';
-import Loader from 'components/loaders';
-import {Input} from 'components/forms/Input';
+import {LoadingWheel} from 'components/loaders';
+import Input from 'components/forms/Input';
import {NewTabLink} from 'components/new-tab-link';
import {Label} from 'components/label';
import {DialogForm, Error, FormLoaderContainer} from 'components/modal/modal-form-response/style';
@@ -23,7 +23,7 @@ interface ICreateChannelInput {
getChannelList: () => Promise
;
}
-const CreateChannelModal = ({setCreateChannelModalOpened, getChannelList}: ICreateChannelInput): JSX.Element => {
+const CreateChannelModal = ({setCreateChannelModalOpened, getChannelList}: ICreateChannelInput): React.JSX.Element => {
const logger = LoggerFactory.getLogger('view/channels/create-channel/CreateChannelModal');
const initialState = {
alias: '',
@@ -66,7 +66,7 @@ const CreateChannelModal = ({setCreateChannelModalOpened, getChannelList}: ICrea
description
});
- await createChannel(alias, name, description);
+ await createChannel({alias, name, description});
logger.info('Channel [%s] was created successfully', alias);
@@ -80,9 +80,10 @@ const CreateChannelModal = ({setCreateChannelModalOpened, getChannelList}: ICrea
const {status, message, requestPayload} = transformToPortalError(e);
setIsLoading(false);
- setError(createChannelErrorMessages[status] || message || createChannelErrorMessages['default']);
+ const errorMessage = (createChannelErrorMessages as Record)[status] || message || createChannelErrorMessages['default'];
+ setError(errorMessage);
- logger.error(`${createChannelErrorMessages[status] || message || createChannelErrorMessages['default']} [%s]`, status, requestPayload);
+ logger.error(`${errorMessage} [%s]`, status, requestPayload);
}
};
@@ -98,7 +99,7 @@ const CreateChannelModal = ({setCreateChannelModalOpened, getChannelList}: ICrea
cancelButton={{onClick: handleClose}}>
{isLoading ? (
-
+
) : (
diff --git a/src/views/channels/create-channel/index.tsx b/src/views/ChannelList/create-channel/index.tsx
similarity index 100%
rename from src/views/channels/create-channel/index.tsx
rename to src/views/ChannelList/create-channel/index.tsx
diff --git a/src/views/ChannelList/index.ts b/src/views/ChannelList/index.ts
deleted file mode 100644
index 119c2dd..0000000
--- a/src/views/ChannelList/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './ChannelList';
diff --git a/src/views/channels/index.tsx b/src/views/ChannelList/index.tsx
similarity index 75%
rename from src/views/channels/index.tsx
rename to src/views/ChannelList/index.tsx
index abaef6e..80c7dd8 100644
--- a/src/views/channels/index.tsx
+++ b/src/views/ChannelList/index.tsx
@@ -1,4 +1,4 @@
/**
* Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
*/
-export {default} from './channels';
+export * from './ChannelList';
diff --git a/src/views/LoginForm/LoginForm.tsx b/src/views/LoginForm/LoginForm.tsx
index 4b86de7..abaf499 100644
--- a/src/views/LoginForm/LoginForm.tsx
+++ b/src/views/LoginForm/LoginForm.tsx
@@ -4,7 +4,7 @@
import {FC, useState, useEffect} from 'react';
import text from './text';
import {useAppDispatch, useAppSelector} from 'store/index';
-import {authenticateCredentialsThunk, selectIsLoading, selectError, setError} from 'store/slices/Authentication.slice';
+import {authenticateCredentialsThunk, selectIsLoading, selectError, setError, selectIsAuthenticated, setCredentials} from 'store/slices/Authentication.slice';
import {
LoginFormBackground,
LogoContainer,
@@ -22,19 +22,39 @@ import {
import personImage from 'assets/images/symbol-person-24x24.png';
import lockImage from 'assets/images/symbol-lock-24x24.png';
import phenixLogo from 'assets/images/phenix-logo-101x41.png';
-import { LoadingWheel } from 'components';
-import links from './links';
+import {LoadingWheel} from 'components';
+import {documentationLinks, phenixWebSiteLinks} from 'constants/links';
+import {useNavigate} from 'react-router-dom';
export const LoginForm: FC = () => {
const {headerText, headerTextSmall, signInText} = text;
- const [applicationId, setApplicationId] = useState('');
- const [secret, setSecret] = useState('');
+ const [applicationId, setApplicationId] = useState('phenixrts.com-alex.zinn');
+ const [secret, setSecret] = useState('AMAsDzr.dIuGMZ.Zu52Dt~MQvP!DZwYg');
const dispatch = useAppDispatch();
const error = useAppSelector(selectError);
const isLoading = useAppSelector(selectIsLoading);
+ const navigate = useNavigate();
+ const isAuthenticated = useAppSelector(selectIsAuthenticated);
+
+ useEffect(() => {
+ if (isAuthenticated) {
+ navigate('/channels', {replace: true});
+ }
+ }, [isAuthenticated, navigate]);
+
+ useEffect(() => {
+ if (error) {
+ const timeoutId = setTimeout(() => {
+ dispatch(setError(null));
+ }, 3000);
+
+ return () => clearTimeout(timeoutId);
+ }
+ }, [dispatch, error]);
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
+ dispatch(setCredentials({applicationId, secret}));
dispatch(authenticateCredentialsThunk({applicationId, secret}));
};
@@ -46,73 +66,56 @@ export const LoginForm: FC = () => {
setter(e.target.value);
};
- useEffect(() => {
- if (error) {
- setTimeout(() => {
- dispatch(setError(null));
- }, 3000);
- }
- }, [error]);
-
return (
-
- {headerText}
-
-
- {headerTextSmall}
-
-
+ {headerText}
+ {headerTextSmall}
+
-
-
+
-
+
- {error && (
-
- {error}
-
- )}
-
-
+ {error && {error}}
+
+
{isLoading ? : signInText}
-
+
);
-};
\ No newline at end of file
+};
diff --git a/src/views/LoginForm/links.ts b/src/views/LoginForm/links.ts
deleted file mode 100644
index e024e2a..0000000
--- a/src/views/LoginForm/links.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-
-export default {
- privacyPolicy: 'https://www.phenixrts.com/privacy-policy',
- termsOfService: 'https://www.phenixrts.com/terms-of-service',
- documentation: 'https://www.phenixrts.com/docs'
-}
\ No newline at end of file
diff --git a/src/views/LoginForm/style.ts b/src/views/LoginForm/style.ts
index 9ed2676..74a745c 100644
--- a/src/views/LoginForm/style.ts
+++ b/src/views/LoginForm/style.ts
@@ -3,8 +3,7 @@
*/
import * as styled from 'styled-components';
import {H1, P} from 'components/typography';
-import Theme from 'theme';
-import phenixLogo from 'assets/images/phenix-logo-101x41.png';
+import Theme from 'theme';
export const LoginFormBackground = styled.default.div`
width: 100%;
@@ -186,4 +185,4 @@ export const Footer = styled.default.div`
color: rgba(255, 255, 255, 0.8);
}
}
-`;
\ No newline at end of file
+`;
diff --git a/src/views/LoginForm/text.ts b/src/views/LoginForm/text.ts
index da6ee4b..dab5734 100644
--- a/src/views/LoginForm/text.ts
+++ b/src/views/LoginForm/text.ts
@@ -10,4 +10,4 @@ export default {
failAuthenticationText: 'Failed to authenticate. Please check your credentials',
emptyCredentialsText: 'Please enter Application Id and Secret',
unknownErrorText: 'An error has occurred. Please try again'
-};
\ No newline at end of file
+};
diff --git a/src/views/LoginForm/view.tsx b/src/views/LoginForm/view.tsx
index 5e0fb57..efeba99 100644
--- a/src/views/LoginForm/view.tsx
+++ b/src/views/LoginForm/view.tsx
@@ -1,32 +1,16 @@
/**
* Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
*/
-import {
- ChangeEvent,
- useRef,
- FC
-} from 'react';
+import {ChangeEvent, useRef, FC} from 'react';
import text from './text';
-import {InputWithRef} from 'components/inputs';
-import Theme from 'theme';
+import {LoginFormBackground as Layout, LoginButton, LoginHeader, LoginText, LoginLink, ErrorText} from './style';
-import {
- LoginLayout as Layout,
- LoginButton,
- LoginHeader,
- LoginText,
- LoginLink,
- ErrorText
-} from './style';
-
-import personImage from 'assets/images/symbol-person-24x24.png';
-import lockImage from 'assets/images/symbol-lock-24x24.png';
-import { LoadingWheel } from 'components/loaders';
+import {LoadingWheel} from 'components/loaders';
interface ILoginContainer {
onSubmit: () => void;
- onChange: (event: ChangeEvent) => void;
+ ignoredOnChange: (event: ChangeEvent) => void;
errorMessage: string;
isLoading?: boolean;
isWebsocketConnected?: boolean;
@@ -34,10 +18,10 @@ interface ILoginContainer {
export const Login: FC = (props: ILoginContainer) => {
const {headerText, headerTextSmall, signInText, loginForgottenText} = text;
- const {onChange, onSubmit, errorMessage, isLoading, isWebsocketConnected} = props;
- const applicationIdRef = useRef(null);
- const secretRef = useRef(null);
- const handleKeySubmit = ({key}) => {
+ const {ignoredOnChange: _ignoredOnChange, onSubmit, errorMessage, isLoading, isWebsocketConnected} = props;
+ const _ignoredApplicationIdRef = useRef(null);
+ const _ignoredSecretRef = useRef(null);
+ const _ignoredHandleKeySubmit = ({key}: {key: string}) => {
if (key !== 'Enter') {
return;
}
@@ -47,12 +31,8 @@ export const Login: FC = (props: ILoginContainer) => {
return (
-
- {headerText}
-
-
- {headerTextSmall}
-
+ {headerText}
+ {headerTextSmall}
{/* = (props: ILoginContainer) => {
autocomplete="new-password"
/> */}
{errorMessage || null}
-
- {(!isWebsocketConnected || isLoading) && }
+
+ {(!isWebsocketConnected || isLoading) && (
+
+
+
+ )}
{isWebsocketConnected && signInText}
-
- {loginForgottenText}
-
+ {loginForgottenText}
);
-};
\ No newline at end of file
+};
diff --git a/src/views/channels/channels.tsx b/src/views/channels/channels.tsx
deleted file mode 100644
index 4a71691..0000000
--- a/src/views/channels/channels.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * Copyright 2024 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
- */
-import {useEffect, useRef, useState} from 'react';
-import {useDispatch, useSelector} from 'react-redux';
-import moment from 'moment';
-
-import LoggerFactory from 'services/logger/LoggerFactory';
-import {channelListErrorMessages, channelListPublishingStateErrorMessages} from 'constants/index';
-import {transformToPortalError} from 'utility/error-handler';
-import {ITableSortSearch} from 'interfaces/tableProps';
-
-import {IAppStore} from 'store';
-import {channelsSelector, listChannels} from 'store/action/channels';
-import {fetchChannelsPublishingState} from 'store/action/channels-publishing';
-import {StoreScreensType} from 'store/reducers/screens';
-import {screensSelector, setScreenProps} from 'store/action/screens';
-
-import Loader from 'components/loaders';
-import RequireAuthentication from 'components/requiresAuth';
-import {Body, Main} from 'components/layout';
-import {TableHeaderKey, ITableWithPaginationHeader} from 'components/table';
-import {TableWithPagination} from 'components/table-with-pagination';
-
-import {Error} from 'components/error-renderer/style';
-import {columns} from './columns-config';
-import {CreateChannelModal} from './create-channel';
-
-const intervalFetchChannelsPublishingState = moment.duration(5, 'seconds').asMilliseconds();
-
-export const ChannelsContainer = (): JSX.Element => {
- const logger = LoggerFactory.getLogger('views/channels/ChannelsContainer');
- const dispatch = useDispatch();
- const interval = useRef(null);
- const {channelList = [], isFetching, error} = useSelector((state: IAppStore) => channelsSelector(state));
- const {searchValue, sortDirection, sortColumn} = useSelector((state: IAppStore) => screensSelector(state)[StoreScreensType.Channels]);
- const [isCreateChannelModalOpened, setCreateChannelModalOpened] = useState(false);
- const [channels, setChannels] = useState([]);
- const [channelsIdOnDisplay, setChannelsIdOnDisplay] = useState([]);
- const channelsColumns = {...columns};
- const getChannelList = async (): Promise => {
- try {
- logger.info('Fetching the list of channels');
-
- await dispatch(listChannels());
-
- logger.info('List of channels was fetched successfully');
- } catch (e) {
- const {status, message, requestPayload} = transformToPortalError(e);
-
- logger.error(`${channelListErrorMessages[status] || message} [%s]`, status, requestPayload);
- }
- };
-
- const getChannelsPublishingState = async (): Promise => {
- if (isFetching || !channelsIdOnDisplay?.length) {
- return;
- }
-
- logger.info('Checking channels publishing state');
-
- try {
- await dispatch(fetchChannelsPublishingState(channelsIdOnDisplay));
- } catch (e) {
- const {status, message, requestPayload} = transformToPortalError(e);
-
- return logger.error(
- `${channelListPublishingStateErrorMessages[status] || message || channelListPublishingStateErrorMessages['default']} [%s]`,
- status,
- requestPayload
- );
- }
- };
-
- useEffect(() => {
- getChannelList();
- }, []);
-
- useEffect(() => {
- const modifiedChannels = channelList.map(channel => ({
- ...channel,
- extraPath: `${encodeURIComponent(channel.channelId)}/preview`
- }));
-
- setChannels(modifiedChannels || []);
- }, [channelList]);
-
- useEffect(() => {
- clearInterval(interval.current);
- interval.current = setInterval(getChannelsPublishingState, intervalFetchChannelsPublishingState);
-
- return () => clearInterval(interval.current);
- }, [channelsIdOnDisplay, isFetching]);
-
- const screenHeader: ITableWithPaginationHeader = {
- [TableHeaderKey.Search]: {},
- [TableHeaderKey.AddRow]: {
- openAddRowModal: () => {
- setCreateChannelModalOpened(true);
- }
- }
- };
- const getCurrentDisplayList = (data: Record[]) => {
- const newChannelsIdOnDisplay: string[] = data.map(val => val?.channelId) as string[];
-
- setChannelsIdOnDisplay(newChannelsIdOnDisplay);
- };
-
- const changeScreenProps = (data: Partial) =>
- dispatch(
- setScreenProps({
- screen: StoreScreensType.Channels,
- data
- })
- );
-
- if (error) {
- return {channelListErrorMessages[error.status] || error.message};
- }
-
- return (
- <>
-
- {isFetching ? (
-
-
-
- ) : (
-
- )}
-
- {isCreateChannelModalOpened && }
- >
- );
-};
-
-export default RequireAuthentication(ChannelsContainer);
diff --git a/tsconfig.app.tsbuildinfo b/tsconfig.app.tsbuildinfo
new file mode 100644
index 0000000..f77f1de
--- /dev/null
+++ b/tsconfig.app.tsbuildinfo
@@ -0,0 +1 @@
+{"root":["./src/app.tsx","./src/declaredtypes.d.ts","./src/main.tsx","./src/vite-env.d.ts","./src/components/protectedroute.tsx","./src/components/index.ts","./src/components/buttons/index.tsx","./src/components/buttons/copy-icon-button/index.tsx","./src/components/buttons/copy-icon-button/styles.ts","./src/components/buttons/export-file-button/index.tsx","./src/components/buttons/icon-button/icon-button.tsx","./src/components/buttons/icon-button/index.tsx","./src/components/buttons/icon-button/styles.ts","./src/components/buttons/icon-buttons/add-button.tsx","./src/components/buttons/icon-buttons/index.ts","./src/components/buttons/icon-buttons/refresh-button.tsx","./src/components/buttons/icon-buttons/style.ts","./src/components/buttons/radio-button/index.tsx","./src/components/buttons/radio-button/style.ts","./src/components/buttons/scroll-buttons/index.tsx","./src/components/channel-icon-menu/index.tsx","./src/components/channel-icon-menu/delete-channel/delete-channel-form.tsx","./src/components/channel-icon-menu/delete-channel/delete-channel-modal.tsx","./src/components/channel-icon-menu/delete-channel/index.tsx","./src/components/channel-icon-menu/fork-channel/fork-channel-form.tsx","./src/components/channel-icon-menu/fork-channel/fork-channel-modal.tsx","./src/components/channel-icon-menu/fork-channel/index.tsx","./src/components/channel-icon-menu/kill-channel/index.tsx","./src/components/channel-icon-menu/kill-channel/kill-channel-form.tsx","./src/components/channel-icon-menu/kill-channel/kill-channel-modal.tsx","./src/components/create-token-components/capabilities.tsx","./src/components/create-token-components/index.ts","./src/components/create-token-components/label-icon-tooltip.tsx","./src/components/create-token-components/styles.ts","./src/components/create-token-components/validity-time.tsx","./src/components/drop-down/index.tsx","./src/components/drop-down/style.ts","./src/components/error-renderer/index.tsx","./src/components/error-renderer/style.ts","./src/components/forms/checkbox.tsx","./src/components/forms/input.tsx","./src/components/forms/checkbox/index.tsx","./src/components/forms/label/index.ts","./src/components/forms/label/label.tsx","./src/components/forms/label/style.ts","./src/components/icon-menu/icon-menu.tsx","./src/components/icon-menu/index.tsx","./src/components/icon-menu/style.ts","./src/components/icon-menu/types.ts","./src/components/label/index.ts","./src/components/layout/index.tsx","./src/components/loaders/loadingwheel.tsx","./src/components/loaders/index.ts","./src/components/modal/index.ts","./src/components/modal/modal.tsx","./src/components/modal/style.ts","./src/components/modal/modal-form-response/form-response.tsx","./src/components/modal/modal-form-response/index.tsx","./src/components/modal/modal-form-response/style.ts","./src/components/modal/multi-step-modal/index.ts","./src/components/modal/multi-step-modal/multi-step-modal.tsx","./src/components/new-tab-link/index.tsx","./src/components/pre-formatted-code/index.tsx","./src/components/pre-formatted-code/pre-formatted-code.tsx","./src/components/pre-formatted-code/styles.ts","./src/components/shared/theme.ts","./src/components/shared/utils.ts","./src/components/table/index.ts","./src/components/table/props.ts","./src/components/table/style.tsx","./src/components/table/table-body.tsx","./src/components/table/table-header-cell.tsx","./src/components/table/table-header.tsx","./src/components/table/table-row.tsx","./src/components/table/table.tsx","./src/components/table/table-cells/index.ts","./src/components/table/table-cells/table-cell-dropdown.tsx","./src/components/tags/index.tsx","./src/components/tags/style.ts","./src/components/tooltip/index.tsx","./src/components/tooltip/style.ts","./src/components/tooltip/types.ts","./src/components/typography/index.tsx","./src/components/ui/index.ts","./src/components/ui/input.tsx","./src/components/ui/styles.ts","./src/components/ui/advanced-select/advanced-select.tsx","./src/components/ui/advanced-select/index.ts","./src/components/ui/advanced-select/style.ts","./src/components/ui/date-picker/date-picker.tsx","./src/components/ui/date-picker/index.ts","./src/components/ui/date-picker/style.ts","./src/components/ui/input-with-tags/index.ts","./src/components/ui/input-with-tags/input-with-tags.tsx","./src/components/ui/input-with-tags/style.ts","./src/components/ui/link/index.tsx","./src/components/ui/link/link.tsx","./src/components/ui/link/styles.ts","./src/components/ui/multi-select/index.ts","./src/components/ui/multi-select/multi-select.tsx","./src/components/ui/multi-select/style.ts","./src/components/ui/radio-button/index.ts","./src/components/ui/radio-button/radio-button.tsx","./src/components/ui/radio-button/style.ts","./src/components/ui/select/index.ts","./src/components/ui/select/select.tsx","./src/components/ui/select/style.ts","./src/components/ui/textarea/index.ts","./src/components/ui/textarea/style.ts","./src/components/ui/textarea/textarea.tsx","./src/config/index.ts","./src/constant-data/capabilities.ts","./src/constant-data/error-messages.ts","./src/constant-data/links.ts","./src/constants/browser-limits.ts","./src/constants/capabilities.ts","./src/constants/data.ts","./src/constants/error-messages.ts","./src/constants/index.ts","./src/constants/links.ts","./src/drop-down/index.tsx","./src/drop-down/style.ts","./src/indicator-component/publishing-state-indicator.tsx","./src/indicator-component/indicators/index.ts","./src/indicator-component/indicators/indicators.tsx","./src/indicator-component/indicators/style.ts","./src/interfaces/analyticsprops.tsx","./src/interfaces/channelprops.tsx","./src/interfaces/chartprops.tsx","./src/interfaces/common.ts","./src/interfaces/index.ts","./src/interfaces/messagesprops.tsx","./src/interfaces/permalinksprops.ts","./src/interfaces/qosprops.ts","./src/interfaces/roomprops.tsx","./src/interfaces/storeprops.ts","./src/interfaces/tableprops.ts","./src/interfaces/videoprops.tsx","./src/lang/strings.ts","./src/lang/assertunreachable.ts","./src/routers/index.tsx","./src/services/authentication.service.ts","./src/services/channel.service.ts","./src/services/pcastapi.service.ts","./src/services/platformdetection.service.ts","./src/services/platform-detection.service.ts","./src/services/userdatastore/iuserdatastore.ts","./src/services/userdatastore/indexeddb.ts","./src/services/userdatastore/localstorage.ts","./src/services/userdatastore/objectstore.ts","./src/services/userdatastore/index.ts","./src/services/logger/appenders.ts","./src/services/logger/consoleappender.ts","./src/services/logger/iappender.ts","./src/services/logger/logger.ts","./src/services/logger/loggerdefaults.ts","./src/services/logger/loggerfactory.ts","./src/services/logger/loggerinterface.ts","./src/services/logger/logginglevelmapping.ts","./src/services/logger/loggingthreshold.ts","./src/services/net/websockets/phenixwebsocket.ts","./src/services/net/websockets/phenixwebsocketmessage.ts","./src/services/net/websockets/phenixwebsocketstatus.ts","./src/services/telemetry/telemetryapender.ts","./src/services/telemetry/telemetryconfiguration.ts","./src/services/telemetry/telemetryservice.ts","./src/services/user-store/iuserdatastore.ts","./src/services/user-store/index.ts","./src/services/user-store/indexed-db.ts","./src/services/user-store/local-storage.ts","./src/services/user-store/object-store.ts","./src/store/index.ts","./src/store/store.ts","./src/store/action/channels-publishing.ts","./src/store/action/channels.ts","./src/store/action/screens.ts","./src/store/middlewares/authenticationmiddleware.ts","./src/store/middlewares/index.ts","./src/store/middlewares/loggermiddleware.ts","./src/store/middlewares/promisemiddleware.ts","./src/store/reducers/screens.ts","./src/store/slices/authentication.slice.ts","./src/store/slices/channels.slice.ts","./src/theme/themefactory.ts","./src/theme/index.ts","./src/theme/defaulttheme/backgroundsystem.ts","./src/theme/defaulttheme/colorsystem.ts","./src/theme/defaulttheme/screensystem.ts","./src/theme/defaulttheme/spacingsystem.ts","./src/theme/defaulttheme/typographysystem.ts","./src/theme/interfaces/ibackgroundsystem.ts","./src/theme/interfaces/icolorsystem.ts","./src/theme/interfaces/iscreensystem.ts","./src/theme/interfaces/ispacingsystem.ts","./src/theme/interfaces/itheme.ts","./src/theme/interfaces/itypographysystem.ts","./src/theme/utils/colorutils.ts","./src/theme/utils/viewportutils.ts","./src/utility/contexts.ts","./src/utility/conversions.ts","./src/utility/custom-hooks.ts","./src/utility/date.ts","./src/utility/error-handler.ts","./src/utility/filters.ts","./src/utility/index.ts","./src/utility/numbers.ts","./src/utility/polyfills.ts","./src/utility/sort.ts","./src/utility/stream.ts","./src/utility/validators.ts","./src/views/index.ts","./src/views/channellist/channel-publishing-state-indicator.tsx","./src/views/channellist/channels.tsx","./src/views/channellist/columns-config.tsx","./src/views/channellist/columns-data.tsx","./src/views/channellist/index.tsx","./src/views/channellist/create-channel/create-channel-modal.tsx","./src/views/channellist/create-channel/index.tsx","./src/views/loginform/loginform.tsx","./src/views/loginform/index.ts","./src/views/loginform/links.ts","./src/views/loginform/style.ts","./src/views/loginform/text.ts","./src/views/loginform/view.tsx"],"errors":true,"version":"5.9.2"}
\ No newline at end of file
diff --git a/vite.config.ts b/vite.config.ts
index 3a1adfd..51eed53 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -19,8 +19,8 @@ export default defineConfig({
alias: {
assets: path.resolve(process.cwd(), 'src', 'assets'),
components: path.resolve(process.cwd(), 'src/components'),
+ constants: path.resolve(process.cwd(), 'src', 'constants'),
config: path.resolve(process.cwd(), 'src', 'config'),
- 'constant-data': path.resolve(process.cwd(), 'src', 'constant-data'),
hooks: path.resolve(process.cwd(), 'src', 'hooks'),
interfaces: path.resolve(process.cwd(), 'src', 'interfaces'),
routers: path.resolve(process.cwd(), 'src', 'routers'),