You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
5.0 KiB
232 lines
5.0 KiB
/**
|
|
* TypeScript interfaces for AccountViewView component
|
|
* Provides type safety for settings, profile data, and component state
|
|
*/
|
|
|
|
import { EndorserRateLimits, ImageRateLimits } from "./index";
|
|
import { LeafletMouseEvent } from "leaflet";
|
|
|
|
/**
|
|
* BoundingBox type describes the geographical bounding box coordinates.
|
|
*/
|
|
export type BoundingBox = {
|
|
eastLong: number; // Eastern longitude
|
|
maxLat: number; // Maximum (Northernmost) latitude
|
|
minLat: number; // Minimum (Southernmost) latitude
|
|
westLong: number; // Western longitude
|
|
};
|
|
|
|
/**
|
|
* Interface for account settings retrieved from database
|
|
*/
|
|
export interface AccountSettings {
|
|
activeDid?: string;
|
|
apiServer?: string;
|
|
firstName?: string;
|
|
lastName?: string;
|
|
hideRegisterPromptOnNewContact?: boolean;
|
|
isRegistered?: boolean;
|
|
searchBoxes?: Array<{
|
|
name: string;
|
|
bbox: BoundingBox;
|
|
}>;
|
|
notifyingNewActivityTime?: string;
|
|
notifyingReminderMessage?: string;
|
|
notifyingReminderTime?: string;
|
|
partnerApiServer?: string;
|
|
profileImageUrl?: string;
|
|
showContactGivesInline?: boolean;
|
|
passkeyExpirationMinutes?: number;
|
|
showGeneralAdvanced?: boolean;
|
|
showShortcutBvc?: boolean;
|
|
warnIfProdServer?: boolean;
|
|
warnIfTestServer?: boolean;
|
|
webPushServer?: string;
|
|
}
|
|
|
|
/**
|
|
* Interface for user profile data from API
|
|
*/
|
|
export interface UserProfileData {
|
|
description?: string;
|
|
locLat?: number;
|
|
locLon?: number;
|
|
}
|
|
|
|
/**
|
|
* Interface for API response containing user profile
|
|
*/
|
|
export interface UserProfileResponse {
|
|
data: UserProfileData;
|
|
}
|
|
|
|
/**
|
|
* Interface for component state related to profile management
|
|
*/
|
|
export interface ProfileState {
|
|
userProfileDesc: string;
|
|
userProfileLatitude: number;
|
|
userProfileLongitude: number;
|
|
includeUserProfileLocation: boolean;
|
|
savingProfile: boolean;
|
|
profileImageUrl?: string;
|
|
}
|
|
|
|
/**
|
|
* Interface for component state related to notifications
|
|
*/
|
|
export interface NotificationState {
|
|
notifyingNewActivity: boolean;
|
|
notifyingNewActivityTime: string;
|
|
notifyingReminder: boolean;
|
|
notifyingReminderMessage: string;
|
|
notifyingReminderTime: string;
|
|
subscription: PushSubscription | null;
|
|
}
|
|
|
|
/**
|
|
* Interface for component state related to settings
|
|
*/
|
|
export interface SettingsState {
|
|
activeDid: string;
|
|
apiServer: string;
|
|
apiServerInput: string;
|
|
partnerApiServer: string;
|
|
partnerApiServerInput: string;
|
|
webPushServer: string;
|
|
webPushServerInput: string;
|
|
passkeyExpirationMinutes: number;
|
|
previousPasskeyExpirationMinutes: number;
|
|
passkeyExpirationDescription: string;
|
|
hideRegisterPromptOnNewContact: boolean;
|
|
isRegistered: boolean;
|
|
isSearchAreasSet: boolean;
|
|
showContactGives: boolean;
|
|
showGeneralAdvanced: boolean;
|
|
showShortcutBvc: boolean;
|
|
warnIfProdServer: boolean;
|
|
warnIfTestServer: boolean;
|
|
}
|
|
|
|
/**
|
|
* Interface for component state related to UI display
|
|
*/
|
|
export interface UIState {
|
|
loadingProfile: boolean;
|
|
loadingLimits: boolean;
|
|
showAdvanced: boolean;
|
|
showB64Copy: boolean;
|
|
showDidCopy: boolean;
|
|
showDerCopy: boolean;
|
|
showPubCopy: boolean;
|
|
showLargeIdenticonId?: string;
|
|
showLargeIdenticonUrl?: string;
|
|
downloadUrl: string;
|
|
zoom: number;
|
|
}
|
|
|
|
/**
|
|
* Interface for component state related to limits and validation
|
|
*/
|
|
export interface LimitsState {
|
|
endorserLimits: EndorserRateLimits | null;
|
|
imageLimits: ImageRateLimits | null;
|
|
limitsMessage: string;
|
|
publicHex: string;
|
|
publicBase64: string;
|
|
derivationPath: string;
|
|
}
|
|
|
|
/**
|
|
* Interface for component state related to identity
|
|
*/
|
|
export interface IdentityState {
|
|
givenName: string;
|
|
}
|
|
|
|
/**
|
|
* Complete interface for AccountViewView component state
|
|
*/
|
|
export interface AccountViewState
|
|
extends ProfileState,
|
|
NotificationState,
|
|
SettingsState,
|
|
UIState,
|
|
LimitsState,
|
|
IdentityState {}
|
|
|
|
/**
|
|
* Interface for clipboard copy operations
|
|
*/
|
|
export interface ClipboardOperation {
|
|
text: string;
|
|
callback: () => void;
|
|
}
|
|
|
|
/**
|
|
* Interface for notification permission callback
|
|
*/
|
|
export interface NotificationPermissionCallback {
|
|
success: boolean;
|
|
timeText: string;
|
|
message?: string;
|
|
}
|
|
|
|
/**
|
|
* Interface for import/export operations
|
|
*/
|
|
export interface ImportExportState {
|
|
inputImportFileNameRef?: Blob;
|
|
}
|
|
|
|
/**
|
|
* Type for API error responses
|
|
*/
|
|
export interface ApiErrorResponse {
|
|
response?: {
|
|
data?: {
|
|
error?: { message?: string } | string;
|
|
};
|
|
status?: number;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Type guard for API errors
|
|
*/
|
|
export function isApiError(error: unknown): error is ApiErrorResponse {
|
|
return typeof error === "object" && error !== null && "response" in error;
|
|
}
|
|
|
|
/**
|
|
* Type guard for standard errors
|
|
*/
|
|
export function isError(error: unknown): error is Error {
|
|
return error instanceof Error;
|
|
}
|
|
|
|
/**
|
|
* Interface for file import content structure
|
|
*/
|
|
export interface ImportContent {
|
|
data?: {
|
|
data?: Array<{
|
|
tableName: string;
|
|
rows: Array<unknown>;
|
|
}>;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Interface for map ready callback
|
|
*/
|
|
export interface MapReadyCallback {
|
|
(map: L.Map): void;
|
|
}
|
|
|
|
/**
|
|
* Interface for mouse event handlers
|
|
*/
|
|
export interface MouseEventHandler {
|
|
(event: LeafletMouseEvent): void;
|
|
}
|
|
|