@mythpe/js-helpers
Version:
Library of plugins & shortcuts that use JavaScript, also includes the Vue3 plugin with quasar apps
338 lines (327 loc) • 9.48 kB
TypeScript
/*
* MyTh Ahmed Faiz Copyright © 2016-2024 All rights reserved.
* Email: mythpe@gmail.com
* Mobile: +966590470092
* Website: https://www.4myth.com
* Github: https://github.com/mythpe
*/
import { AxiosInstance } from 'axios'
import {
openURL,
QBtnDropdownProps,
QBtnProps,
QCardProps,
QDialogOptions,
QDialogProps,
QFieldProps,
QIconProps,
QInfiniteScroll,
QItemLabelProps,
QItemProps,
QItemSectionProps,
QListProps,
QMenuProps,
QNotifyCreateOptions,
QPageStickyProps,
QPopupProxyProps,
QTooltipProps
} from 'quasar'
import {
MAvatarViewerProps,
MBlockProps,
MBtnProps,
MCardProps,
MCheckboxProps,
MCkeditorProps,
MColProps,
MColumnProps,
MContainerProps,
MDatatableProps,
MDateProps,
MDraggableProps,
MDtBtnProps,
MEditorProps,
MFileProps,
MHelpRowProps,
MInputProps,
MModalMenuProps,
MNoResultImgProps,
MOptionsProps,
MOtpProps,
MPickerProps,
MRadioProps,
MRowProps,
MSelectProps,
MSignaturePadProps,
MTimeProps,
MToggleProps,
MTypingStringProps,
MUploaderProps
} from '../components'
import { I18n } from 'vue-i18n'
import { ComputedRef, MaybeRefOrGetter, Ref } from 'vue'
import { RouteLocationNormalizedLoaded } from 'vue-router'
import {
ApiErrorResponse,
ApiInterface,
MDtColumn,
MDtHeadersParameter,
ParseHeaderOptions,
Vue3MAlertMessage,
Vue3MAlertMessageOptions,
Vue3MConfirmMessage
} from './m-helpers'
import { Dates, Helpers, Str } from '../utils'
import { ConfigType, MythApiServicesSchema } from './api-helpers'
export interface MythOptionsConfig {
/**
* Rules keys that can be added to Input Rules as Vue Attr
*/
inputRules?: string[];
/**
* Google Maps API key.
*/
google?: {
apiKey: string;
// eslint-disable-next-line no-undef
mapsOptions?: google.maps.MapOptions;
};
notify?: Partial<QNotifyCreateOptions>;
dialog?: Partial<QDialogOptions>;
confirmDialog?: Partial<QDialogOptions>;
confirmDialogOptions?: {
buttons?: Partial<QBtnProps>;
okProps?: Partial<QBtnProps>;
cancelProps?: Partial<QBtnProps>;
};
datatable?: Partial<MDatatableProps>;
/**
* Styles for DataTable.
*/
dt?: {
/**
* Style of the DataTable.
*/
dense?: boolean;
/**
* Quasar loading with datatable loading props.
*/
useQuasarLoading?: boolean;
/**
* MModalMenu props.
* Inside table top slot.
* defaults: no-close-btn & persistent & position="top"
*/
filterDialogProps?: Partial<QDialogProps> & Partial<QMenuProps> & Partial<QPopupProxyProps>;
showDialogProps?: Partial<QDialogProps>;
formDialogProps?: Partial<QDialogProps>;
fabBtn?: {
pageStickyProps?: Partial<QPageStickyProps>;
offset?: QPageStickyProps['offset'];
position?: QPageStickyProps['position'];
buttonProps?: Partial<QBtnProps>;
},
contextmenu?: {
menu?: Partial<MModalMenuProps>;
list?: Partial<QListProps>;
btnStyle?: {
showLabel?: boolean;
updateColor?: string;
showColor?: string;
destroyColor?: string;
}
},
buttons?: {
filter?: Partial<MDtBtnProps>;
refresh?: Partial<MDtBtnProps>;
more?: Partial<MDtBtnProps>;
fullscreen?: Partial<MDtBtnProps>;
moreMenu?: Partial<QMenuProps>;
moreList?: Partial<QListProps>;
moreItem?: Partial<QItemProps>;
},
topSelection?: {
btn?: Partial<MDtBtnProps>;
},
searchInput?: {
props?: Partial<MInputProps>;
optionsIcon?: string;
menuProps?: Partial<QMenuProps>;
menuBtn?: Partial<QBtnProps>;
};
dialogButtonsProps?: Partial<MBtnProps>;
listItem?: {
item?: Partial<QItemProps>;
avatarSection?: Partial<QItemSectionProps>;
icon?: Partial<QIconProps>;
labelSection?: Partial<QItemSectionProps>;
labelItem?: Partial<QItemLabelProps>;
};
btn?: Partial<MDtBtnProps>;
/**
* Dropdown of control column in table.
* q-btn-dropdown
*/
controlDropdown?: Partial<QBtnDropdownProps>;
MDtBtn?: {
/**
* List mode Props.
*/
item?: {
/**
* Item Props.
*/
props?: Partial<QItemProps>;
/**
* q-item-section.
* Props of avatar section.
*/
avatarProps?: Partial<QItemSectionProps>;
/**
* q-icon.
* Props of icon inside avatar section.
*/
iconProps?: Partial<QIconProps>;
/**
* q-item-section.
* Props of label section.
*/
labelSectionProps?: Partial<QItemSectionProps>;
/**
* q-item-label.
* Props of label inside label section.
*/
itemLabelProps?: Partial<QItemLabelProps>;
};
/**
* MDtBtn btn mode Props.
*/
btn?: {
props?: Partial<QBtnProps>;
};
}
};
button?: Partial<QBtnProps>;
loadingButtons?: {
elm?: undefined | 'audio' | 'ball' | 'bars' | 'box' | 'clock' | 'comment' | 'cube' | 'dots' | 'facebook' | 'gears' | 'grid' | 'hearts' | 'hourglass' | 'infinity' | 'ios' | 'orbit' | 'oval' | 'pie' | 'puff' | 'radio' | 'rings' | 'tail'
color?: string | undefined;
size?: string | undefined;
};
input?: Partial<MInputProps>;
avatarViewer?: Partial<MAvatarViewerProps>;
options?: Partial<MOptionsProps>;
mobile?: Partial<MInputProps>;
field?: Partial<QFieldProps>;
file?: Partial<MFileProps>;
picker?: Partial<MPickerProps>;
pickerBtn?: Partial<MBtnProps>;
date?: Partial<MDateProps>;
time?: Partial<MTimeProps>;
select?: Partial<MSelectProps>;
signaturePad?: Partial<MSignaturePadProps>;
checkbox?: Partial<MCheckboxProps>;
editor?: Partial<MEditorProps>;
ckeditor?: Partial<MCkeditorProps>;
radio?: Partial<MRadioProps>;
toggle?: Partial<MToggleProps>;
uploader?: Partial<MUploaderProps>;
uploaderOptions?: {
downloadBtnProps?: Partial<QBtnProps>;
removeBtnProps?: Partial<QBtnProps>;
iconsSize?: MUploaderProps['iconsSize'];
};
container?: Partial<MContainerProps>;
row?: Partial<MRowProps>;
col?: Partial<MColProps>;
column?: Partial<MColumnProps>;
draggable?: Partial<MDraggableProps>;
noResultImg?: Partial<MNoResultImgProps>;
modalMenu?: Partial<MModalMenuProps>;
modalMenuOptions?: {
card?: Partial<QCardProps>;
closeBtn?: Partial<QItemProps>;
};
tooltip?: Partial<QTooltipProps>;
otp?: Partial<MOtpProps>;
card?: Partial<MCardProps>;
block?: Partial<MBlockProps>;
typingString?: Partial<Omit<MTypingStringProps, 'string'>>;
helpRow?: Partial<Omit<MHelpRowProps, 'text'>>;
helpRowIcon?: Partial<QIconProps>;
helpRowItem?: Partial<QItemProps>;
}
export type MythApiAxiosType = Partial<AxiosInstance>
export type MythApiConfig = {
baseUrl: string;
axios: MythApiAxiosType;
services: MythApiServicesSchema
}
export type MythI18nType = I18n<false>;
export type UseMythVue = {
i18n: MythI18nType;
baseUrl: string;
axios: MythApiAxiosType;
services: MythApiServicesSchema;
options: MythOptionsConfig;
str: typeof Str,
dates: typeof Dates,
helpers: typeof Helpers,
tools: {
isSmall: ComputedRef<boolean>;
popupBreakpoint: ComputedRef<string | number | undefined>;
transitions: {
slideLeftFade: {
hide: ComputedRef<string>;
show: ComputedRef<string>;
},
slideRightFade: {
hide: ComputedRef<string>;
show: ComputedRef<string>;
},
slideDownFade: {
hide: ComputedRef<string>;
show: ComputedRef<string>;
},
slideUpFade: {
hide: ComputedRef<string>;
show: ComputedRef<string>;
},
}
},
getPageTitle (route: RouteLocationNormalizedLoaded, number?: number | string): string;
parseHeaders (headers: MDtHeadersParameter, options?: ParseHeaderOptions): MDtColumn[];
__ (string: string | { text: string } | any, ...args: any[]): string;
copyText (text: string | any): Promise<void>;
quasarNotifyOptions (opts: QNotifyCreateOptions | string): QNotifyCreateOptions;
alertMessage (opts: Vue3MAlertMessageOptions): Vue3MAlertMessage;
alertSuccess (message: string): Vue3MAlertMessage;
alertError (message: string): Vue3MAlertMessage;
confirmMessage (message?: string, title?: string, opts?: QDialogOptions): Vue3MConfirmMessage;
[key: string]: any;
}
export type InstallPluginOptions = {
i18n: MythI18nType;
api: MythApiConfig;
options: MythOptionsConfig;
}
export type UseModelMethod = string | ((id: any, config?: ConfigType | undefined) => Promise<ApiInterface>);
export type UseModelsMethod = string | ((config?: ConfigType | undefined) => Promise<ApiInterface>);
export type UseModelsOptionsArg = {
lazy?: boolean;
search?: ComputedRef<string | null | undefined> | Ref<string | null | undefined>;
filter?: ComputedRef<Record<string, any>> | Ref<Record<string, any>>;
isPanel?: boolean | MaybeRefOrGetter<boolean>;
method?: UseModelMethod | UseModelsMethod;
timeout?: number;
qInfiniteScroll?: Ref<InstanceType<typeof QInfiniteScroll> | null>;
onSuccess?: (data: ApiInterface) => void;
onError?: (e: ApiErrorResponse) => void;
}
declare module '/runtime-core' {
interface ComponentCustomProperties {
$myth: UseMythVue;
openWindow: InstanceType<typeof openURL>;
__: UseMythVue['__']
getPageTitle (number?: number | string, route?: RouteLocationNormalizedLoaded): string;
}
}