armisa-models
Version:
models of armisa!
330 lines (282 loc) • 10.8 kB
text/typescript
import { MainStateManager } from './MainStateManager';
import { Login } from './Login/Login';
import { TabPageData } from './Page/Tab/TabData';
import { IData } from './Data';
import { IReportInfoing } from './ReportInfo';
interface IUser {
id: number;
accessToken: string;
userName: string;
firstName: string;
lastName: string;
picture: string;
smallPicture: string;
reportInfo: IReportInfoing[];
attachedData: IData[];
roles: string[];
userOptions: IUserOption[];
userColumns: IUserColumn[];
}
interface IUserOption {
key: string;
form: any;
value: any;
}
export class UserOption {
public value: any;
constructor(
public key: string,
public form: any,
value: any
) {
this.value = value.toString();
}
static deserialize(userOption: IUserOption) {
return new UserOption(userOption.key, userOption.form, userOption.value);
}
}
interface IUserColumn {
key: string;
form: any;
width: any;
}
export class UserColumn {
constructor(
public key: string,
public form: any,
public width: number,
) {
}
static deserialize(userColumn: IUserColumn) {
return new UserColumn(userColumn.key, userColumn.form, userColumn.width);
}
}
type IUserLoginFormState = | 'login' | 'signup' | 'verify' | 'error' | 'MobileRegistered';
export class User {
public isInRole = <T extends { selfRole: string; }>(main: T, role: keyof T): boolean => {
if (this.isThisUserAdmin) {
return true;
} else if (this.roles.includes(main.selfRole)) {
return true;
} else if (this.roles.includes((main.selfRole + '_' + main[role]).toLowerCase())) {
return true;
}
return false;
}
private _isThisUserAdmin = (): void => {
if (this.roles.find(i => i === 'Admin'.toLowerCase())) {
this.isThisUserAdmin = true;
} else {
this.isThisUserAdmin = false;
}
}
public userLoginFormState: IUserLoginFormState = 'login';
public headers = () => {
if (this.accessToken) {
return {
Authorization: `bearer ${this.accessToken}`,
};
} else {
return undefined;
}
}
public id: number = 0;
public accessToken: string = '';
public userName: string = '';
public firstName: string = '';
public lastName: string = '';
public picture: string = '';
public smallPicture: string = '';
public rememberMe: boolean = false;
public roles: string[] = [];
public userOptions: UserOption[] = [];
public userColumns: UserColumn[] = [];
public isThisUserAdmin: boolean = false;
public LoginFactory = Login.buildNew(this.mainStateManager);
public intervalForBackgroundChangePage?: NodeJS.Timeout;
public initializingUserBackground: boolean = false;
public userBackgrounDiv?: HTMLElement;
constructor(public mainStateManager: MainStateManager) { }
unMountUserPage() {
this.initializingUserBackground = false;
this.userBackgrounDiv = undefined;
if (this.intervalForBackgroundChangePage) {
clearInterval(this.intervalForBackgroundChangePage);
}
}
loginDataLoad = () => {
const userPropertyString = localStorage.getItem('userProperty');
if (userPropertyString) {
this.rememberMe = true;
const userProperty = new UserProperty(JSON.parse(userPropertyString));
if (userProperty && userProperty.accessToken) {
this.accessToken = userProperty.accessToken;
this.LoginFactory = Login.buildNew(this.mainStateManager);
// this.LoginFactory.get('user', 'TokenValidation', (response: AxiosResponse) =>
// this.validateToken(response, userProperty, this.rememberMe),
// this.unauthorized
// );
// this.LoginFactory.get<any, any>('user', 'tokenValidation')
// .then(response => {
// if (response.isSuccess) {
// // this.mainStateManager.Usering.LoginFactory.loadingState = 'none';
// const userData: IUser = response.data;
// userProperty.firstName = userData.firstName;
// userProperty.lastName = userData.lastName;
// userProperty.userName = userData.userName;
// userProperty.id = userData.id;
// userProperty.picture = userData.picture;
// userProperty.smallPicture = userData.smallPicture;
// userProperty.roles = userData.roles;
// this.userLogin(userData, this.rememberMe);
// } else {
// localStorage.removeItem('userProperty');
// this.gotoLoginPage();
// }
// })
// .catch(error => {
// localStorage.removeItem('userProperty');
// this.gotoLoginPage();
// })
return;
}
}
this.gotoLoginPage();
};
// validateToken = (response: AxiosResponse, userProperty: UserProperty, rememberMe: boolean) => {
// if (response.status === 200 && response.data.isSuccess) {
// const userData: IUser = response.data.data;
// userProperty.firstName = userData.firstName;
// userProperty.lastName = userData.lastName;
// userProperty.userName = userData.userName;
// userProperty.id = userData.id;
// userProperty.picture = userData.picture;
// userProperty.smallPicture = userData.smallPicture;
// userProperty.roles = userData.roles;
// this.userLogin(userData, rememberMe);
// } else {
// localStorage.removeItem('userProperty');
// this.gotoLoginPage();
// }
// };
// unauthorized = (error: AxiosError) => {
// localStorage.removeItem('userProperty');
// this.gotoLoginPage();
// };
logOut = () => {
localStorage.removeItem('userProperty');
this.gotoLoginPage();
};
gotoLoginPage = () => {
// this.mainStateManager.Usering.LoginFactory.loadingState = 'none';
this.LoginFactory.pageData = new TabPageData(this.mainStateManager);
// this.mainStateManager.Eventing.trigger('userLoginLoadData');
};
userLogin = (response: IUser, rememberMe: boolean) => {
this.id = response.id;
this.userName = response.userName;
this.accessToken = response.accessToken;
this.firstName = response.firstName;
this.lastName = response.lastName;
this.smallPicture = response.smallPicture;
this.roles = response.roles.map(i => i.toLowerCase());
// this.mainStateManager.ReportInfoing.userLogin(response.reportInfo);
this._isThisUserAdmin();
this.userOptions = response.userOptions?.map(i => UserOption.deserialize(i));
this.userColumns = response.userColumns?.map(i => UserColumn.deserialize(i));
// this.mainStateManager.Dataing.deserialize(response.attachedData);
this.rememberMe = rememberMe;
if (rememberMe) {
localStorage.setItem('userProperty', JSON.stringify({ accessToken: this.accessToken, }));
}
// this.mainStateManager.generateTheme();
// this.mainStateManager.Eventing.trigger('userLoginSuccess');
};
userChangeData = (response: IUser) => {
this.userName = response.userName;
this.accessToken = response.accessToken;
this.firstName = response.firstName;
this.lastName = response.lastName;
this.smallPicture = response.smallPicture;
this.roles = response.roles;
this.userOptions = response.userOptions.map(i => UserOption.deserialize(i));
if (this.rememberMe) {
localStorage.setItem('userProperty', JSON.stringify({ accessToken: this.accessToken, }));
}
// this.mainStateManager.Dataing.deserialize(response.attachedData);
// this.mainStateManager.Eventing.trigger('loadLanguagesSuccess');
};
getFormUserOptions = (keyOfForm: any): UserOption[] => {
return this.userOptions.filter(i => i.form === keyOfForm);
}
// addUserOption = (key: string, pageKeys: string[], value: string, isSave?: boolean) => {
// pageKeys.forEach((i: any) => {
// const userOption = new UserOption(key, i, value);
// this.userOptions.push(userOption);
// if (isSave) {
// this.LoginFactory.post('User', 'AddUserOption', userOption);
// }
// });
// this.updateUserOptionTabPage(pageKeys);
// }
// removeUserOption = (key: string, pageKeys: string[], isSave?: boolean) => {
// this.userOptions = this.userOptions.filter(i => !(i.key === key && pageKeys.includes(i.form)));
// if (isSave) {
// pageKeys.forEach(i => {
// const result = { key: key, form: i };
// this.LoginFactory.post('User', 'DeleteUserOption', result);
// });
// }
// this.updateUserOptionTabPage(pageKeys);
// }
// saveUserOption = (key: string, pageKeys: string[], value: string) => {
// pageKeys.forEach((i: any) => {
// const result: IUserOption = { key: key, form: i, value: value };
// this.LoginFactory.post('User', 'AddUserOption', result);
// });
// }
// public setUserOption = <V>(key: string, pageKey: string, value: V, defaultValue: V, isSave?: boolean) => {
// const finded = this.userOptions.find(i => i.key === key && i.form === pageKey);
// const valueString = (value as any).toString();
// if (finded) {
// const defaultValueString = (defaultValue as any).toString();
// if (valueString === defaultValueString) {
// this.removeUserOption(finded.key, [finded.form], true);
// } else {
// finded.value = valueString;
// if (isSave) {
// this.saveUserOption(finded.key, [finded.form], valueString);
// }
// }
// } else {
// this.addUserOption(key, [pageKey], valueString, isSave);
// }
// }
private updateUserOptionTabPage(pageKeys: string[]) {
// this.mainStateManager.Tabing.tabs.forEach((page: any) => {
// if (pageKeys.includes(page.pageKey)) {
// page.userOptions = this.userOptions?.filter(i => i.form === page.pageKey);
// }
// });
}
}
class UserProperty {
public id: number;
public userName: string;
public firstName: string;
public lastName: string;
public accessToken: string;
public picture: string;
public smallPicture: string;
public roles: string[];
constructor(values: any) {
this.id = values.id;
this.userName = values.userName;
this.firstName = values.firstName;
this.lastName = values.lastName;
this.accessToken = values.accessToken;
this.picture = values.picture;
this.smallPicture = values.smallPicture;
this.roles = values.roles;
}
}