Initial Commit ...

This commit is contained in:
2026-04-17 17:04:44 +03:30
commit a986295e19
842 changed files with 97431 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,78 @@
:host {
--avatar-size: 40px;
}
.x-header {
flex: 1 1 auto;
}
.v-dto-field {
width: 100%;
display: block;
margin: {
top: 8px;
bottom: 8px;
}
}
.v-user {
width: 100%;
display: block;
}
.v-user-wrapper {
padding: 6px;
}
.v-avatar-image {
//
width: var(--avatar-size);
height: var(--avatar-size);
//
clip-path: circle();
}
.v-user-full-name,
.v-user-friendship-state {
//
margin: {
left: 6px;
right: 6px;
}
}
.v-user-role,
.v-user-friendship-state {
font-size: xx-small;
}
.v-user-info-container {
//
width: 100%;
display: block;
padding: {
left: 6px;
right: 6px;
}
// height: var(--avatar-size);
}
::ng-deep x-card.v-user-card {
.x-avatar {
width: var(--avatar-size) !important;
height: var(--avatar-size) !important;
}
}
:host ::ng-deep .v-user-friendship-container {
.x-button {
.x-icon {
color: inherit !important;
}
}
}
.v-dto-field-value-phoneNumber {
direction: ltr;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,254 @@
import {
toNormalString,
isNullOrUndefined,
isNullOrEmptyString,
XResourceIdentifier,
} from 'x-framework-core';
import { defaultAvatar, defaultFullName } from './v-user.typings';
import { XGender, XUserProfileDto } from 'x-framework-identity-sdk';
import { AppResourceIDs } from 'src/app/config/localization.config';
import { getTopRoleByRoles, XAvailableRoles } from 'x-mabsut-api-sdk';
/**
* Generate User Full Name ...
*
* @param user
* @returns
*/
export function getUserFullName(user: XUserProfileDto) {
//
if (isNullOrUndefined(user)) {
return defaultFullName;
}
//
return `${user.firstName} ${user.lastName}`;
}
/**
* Get User Avatar URL ...
*
* @param user
* @returns
*/
export function getUserAvatarURL(user: XUserProfileDto) {
//
if (isNullOrUndefined(user)) {
return defaultAvatar;
}
//
return user.avatar || defaultAvatar;
}
/**
* Retrieve Specified Role Title Resource Id ...
*
* @param role
* @returns
*/
export function getRoleTitleResourceId(role: XAvailableRoles | string) {
//
let result: XResourceIdentifier = null;
if (isNullOrEmptyString(role)) {
return result;
}
//
const mRole = toNormalString(role);
switch (mRole) {
//
case 'admin':
result = AppResourceIDs.admin_role;
break;
//
case 'responsible_manager':
result = AppResourceIDs.responsible_manager_role;
break;
//
case 'journalist':
result = AppResourceIDs.journalist_role;
break;
//
case 'chief_clerk':
result = AppResourceIDs.chief_clerk_role;
break;
//
case 'chief_clerk_assistant':
result = AppResourceIDs.chief_clerk_assistant_role;
break;
//
case 'actuary':
result = AppResourceIDs.actuary_role;
break;
//
case 'actuary_assistant':
result = AppResourceIDs.actuary_assistant_role;
break;
//
case 'reporter':
result = AppResourceIDs.reporter_role;
break;
//
case 'reporter_assistant':
result = AppResourceIDs.reporter_assistant_role;
break;
//
case 'agent':
result = AppResourceIDs.agent_role;
break;
//
case 'user':
result = AppResourceIDs.user_role;
break;
}
//
return result;
}
/**
* Retrieve Specified Role Description Resource Id ...
*
* @param role
* @returns
*/
export function getRoleDescriptionResourceId(role: XAvailableRoles | string) {
//
let result: XResourceIdentifier = null;
if (isNullOrEmptyString(role)) {
return result;
}
//
const mRole = toNormalString(role);
switch (mRole) {
//
case 'admin':
result = AppResourceIDs.admin_role_description;
break;
//
case 'responsible_manager':
result = AppResourceIDs.responsible_manager_role_description;
break;
//
case 'journalist':
result = AppResourceIDs.journalist_role_description;
break;
//
case 'chief_clerk':
result = AppResourceIDs.chief_clerk_role_description;
break;
//
case 'chief_clerk_assistant':
result = AppResourceIDs.chief_clerk_assistant_role_description;
break;
//
case 'actuary':
result = AppResourceIDs.actuary_role_description;
break;
//
case 'actuary_assistant':
result = AppResourceIDs.actuary_assistant_role_description;
break;
//
case 'reporter':
result = AppResourceIDs.reporter_role_description;
break;
//
case 'reporter_assistant':
result = AppResourceIDs.reporter_assistant_role_description;
break;
//
case 'agent':
result = AppResourceIDs.agent_role_description;
break;
//
case 'user':
result = AppResourceIDs.user_role_description;
break;
}
//
return result;
}
/**
* Extract User Top Role ...
*
* @param user
* @returns
*/
export function getUserTopRole(user: XUserProfileDto) {
//
if (isNullOrUndefined(user)) {
return undefined;
}
//
return getTopRole(user.roles);
}
/**
* Extract Top Role based on Roles Array ...
*
* @param roles
* @returns
*/
export function getTopRole(roles: Array<XAvailableRoles | string>) {
return getTopRoleByRoles(roles);
}
/**
* Extract Gender Resource Id ...
*
* @param gender
* @returns
*/
export function getGenderResourceId(gender: XGender) {
//
if (gender === XGender.Male) {
return AppResourceIDs.male;
} else if (gender === XGender.Female) {
return AppResourceIDs.female;
}
//
return undefined;
}
/**
* Extract User Gender Resource Id ...
*
* @param user
* @returns
*/
export function getUserGenderResourceId(user: XUserProfileDto) {
//
if (!user) {
return undefined;
}
//
return getGenderResourceId(user.gender);
}
@@ -0,0 +1,97 @@
import {
XStandardType,
XColorIdentifier,
XColorWithBrightness,
} from 'x-framework-core';
import {
VFriendshipEventModel,
FriendshipActionsPresentType,
FriendshipActionsPresentTypeIdentifier,
} from '../v-friendship/v-friendship.typings';
import { EventEmitter, Injectable } from '@angular/core';
import { XUserProfileDto } from 'x-framework-identity-sdk';
import { XSlotName, XSlotNameIdentifier } from 'x-framework-components';
import { VBaseDtoContainer } from '../../v-dto/v-dto.typings';
//
//#region Resource and Typings ...
export const defaultFullName = '...';
export const defaultAvatar = '/assets/image/default-user-image.png';
/**
* Present Types ...
*/
export enum VUserPresentType {
/**
* Represent Nothing ...
*/
AsNone = 'as_none',
/**
* Represent a User as Form for Add or Update Configured Fields ...
*/
AsForm = 'as_form',
/**
* Represent Only Avatar ...
*/
AsAvatar = 'as_avatar',
/**
* Represent User Avatar and Full Name ...
*/
AsInfo = 'as_info',
/**
* Represent User Info and it's Related Axctions as a Follower ...
*/
AsFollower = 'as_follower',
AsFollowerActions = 'as_follower_actions',
/**
* Represent User Info and it's Related Axctions as a Following ...
*/
AsFollowing = 'as_following',
AsFollowingActions = 'as_following_actions',
/**
* Represent a User as it's Profile Summary which contains all
* available features ...
*/
AsProfile = 'as_profile',
}
export type VUserPresentTypeIdentifier = VUserPresentType | string;
export enum UserProfileTasks {
AddUserProfile = 'add_user_profile',
UpdateUserProfile = 'update_user_profile',
}
//#endregion
//
//#region Container ...
/**
* Contains all available Input/Output(s) default Values ...
*/
@Injectable({
providedIn: 'root',
})
export class VUserDtoContainer extends VBaseDtoContainer {
//
readonly userInfoColor: XColorIdentifier = XColorWithBrightness.PrimaryTint;
readonly putUserInfoOnCardHeader: boolean = false;
//
readonly avatarSize: number = 40;
readonly wrapWithCard: boolean = false;
readonly autoStylingSlots: boolean = true;
readonly avatarSlot: XSlotNameIdentifier = XSlotName.START;
readonly fullNameSlot: XSlotNameIdentifier = XSlotName.CENTER;
readonly friendshipActionsSlot: XSlotNameIdentifier = XSlotName.END;
readonly friendshipActionFired: EventEmitter<VFriendshipEventModel> =
new EventEmitter<VFriendshipEventModel>();
//
readonly showActionsOnProfileView: XStandardType<boolean> = false;
readonly friendshipActionsType: FriendshipActionsPresentTypeIdentifier =
FriendshipActionsPresentType.AsFAB;
//
readonly canSelectUser = false;
}
//#endregion