declare enum AutocompleteTypes { tag = 'tag', autocomplete = 'autocomplete', tagAutocomplete = 'tagAutocomplete', } declare enum AutocompleteEvents { cursorchanged = 'fluig.autocomplete.cursorchanged', opened = 'fluig.autocomplete.opened', closed = 'fluig.autocomplete.closed', selected = 'fluig.autocomplete.selected', autocompleted = 'fluig.autocomplete.autocompleted', beforeItemAdd = 'fluig.autocomplete.beforeItemAdd', itemAdded = 'fluig.autocomplete.itemAdded', beforeItemUpdate = 'fluig.autocomplete.beforeItemUpdate', itemUpdated = 'fluig.autocomplete.itemUpdated', beforeItemRemove = 'fluig.autocomplete.beforeItemRemove', itemRemoved = 'fluig.autocomplete.itemRemoved', } // Adicionar eventos conforme necessário // ============================= // INTERFACES DE COMPONENTES UI // ============================= interface Toast { title?: string message: string type?: 'success' | 'warning' | 'danger' | 'info' timeout?: number } interface ConfirmSettings { title: string message: string labelYes?: string labelNo?: string } interface AlertSettings { title: string message: string label?: string } interface ErrorSettings { title: string message: string details: string } interface ModalSettings { title: string content: string | Widget id: string showHeader: boolean showFooter: boolean actions: object[] headerActions: unknown[] headerContent: string size: string formModal: boolean } interface Widget { widgetCode: string ftl: string data: { sociableId: string listType: string customInstance: string } } // ============================= // INTERFACES DE AUTOCOMPLETE // ============================= interface AutocompleteOptions { type: AutocompleteTypes displayKey: string templates: string source: T[] | (() => T[]) searchTimeout: string highlight: string minLength: string hint: string tagClass: string maxTags: string allowDuplicates: string onTagExists: string onMaxTags: string name: string tagRemoveCss: string tagMaxWidth: string autoLoading?: boolean } // ============================= // INTERFACES DE DATATABLE // ============================= interface HeaderDatatable { title: string dataorder?: string standard?: boolean size?: string display?: boolean } interface DataRequest { [key: string]: T } export interface DatatableOptions { dataRequest: DataRequest[] | object renderContent: string | string[] header: HeaderDatatable[] multiSelect: boolean classSelected: string search: object scroll: object actions: { enabled: boolean template: string actionAreaStyle: string } emptyMessage: string navButtons: object tableStyle: string draggable: { enabled: boolean onDrag: () => void } } // ============================= // TIPOS DE CALLBACK // ============================= declare type ConfirmCallback = (result: boolean, element: HTMLElement, event: Event) => void declare type MessageCallback = (element: HTMLElement, event: Event) => void declare type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' // ============================= // DECLARAÇÃO GLOBAL DE FUNÇÕES // ============================= declare global { // ============================= // INTERFACE WINDOW ESTENDIDA // ============================= interface Window { $: unknown FLUIGC: { popover(arg0: string, arg1: { trigger: string; placement: string }): unknown message: message toast: (options: Toast) => void loading: (target: unknown, options?: object) => Loading modal: (option: ModalSettings, callback?: (err: unknown, data: object) => void) => Modal datatable: (target: string, options: DatatableOptions) => Datatable autocomplete( target: string | HTMLElement, options: AutocompleteOptions, callback?: (error: unknown, data: object) => void ): Autocomplete ajax( options: { url: string contentType?: string dataType?: string type?: HttpMethod data?: unknown async?: boolean }, callback: (err: unknown, data: T) => void ): void rightbar(options: { appendTo?: string content: string backdrop?: boolean width?: string height?: string | number position?: string }): void sidebar(options: { title: string content: string actions?: Array<{ label: string bind?: string classType?: string autoClose?: boolean btnLink?: boolean hasIcon?: boolean flaticon?: string }> }): void calendar: { formatDateTimeZone(date: number | string): string } utilities: { ctrlIsPressed(event: Event): boolean } messagePage: (settings: MessagePageSettings) => MessagePageInstance } ECM: { workflowView: { processInstanceId: unknown sequenceDigitalSignature: unknown availableUsers: unknown isNewRequest: unknown panelCounterSign: unknown internalFields: unknown isDigitalSigned: unknown deleteUploadFiles: unknown digitalSignature: unknown version: unknown processId: unknown isInitialState: boolean signPath: unknown docFileOrigName: unknown nameFileToBeSigned: unknown counterSign: unknown tabView: { selectTab?: (tab: number) => void } availableStates: unknown[] forecastedEffortType: number appointments: unknown[] adHocTask: boolean userPermissions: string[] processDefinition: { nrDoc: unknown versionDoc: unknown managerMode: unknown currentMovto: unknown taskUserId: string processInstanceId: number wkfViewHistory: { startDate: string } } sequence: number selectOrderAttachment: number attachments: Attachment[] requesterId?: string formId?: number selectUserAutomatic?: unknown resizeHeight?: () => void } attachmentTable: Datatable newAttachmentsDocs: Attachment[] documentPublisher: { action?: string doc?: { documentType: string principalFileName?: string deleteUploadFiles?: boolean compunknownId?: number uploadFolder?: string documentId?: number version?: number documentDescription?: string } panel?: unknown createTabs?: () => void } documentTypes: { WORKFLOWATTACHMENT: string } restUrl: string WKFViewAttachment?: WKFViewAttachment } WCMAPI: WCMAPI WKFViewAttachment: WKFViewAttachment formMode: FormMod ECM_WKFView: ECM_WKFView } // Funções globais do Fluig function wdkAddChild(tablename: string): number function fnWdkRemoveChild(element: Element): void // Variável global definida pelo Fluig no navegador const formMode: FormMod // ============================= // CLASSES DE DATATABLE // ============================= interface DataCallback { selectedRows(): number[] selectedIndex: number[] } class Datatable { reload(data: DataRequest | DataRequest[]): void on(event: string, callback: (data: DataCallback) => void): void getRow(index: number, isHtml?: boolean): unknown getData(): unknown[] selectedRows(): number[] updateRow(index: number, data: unknown): void showLoading(): void hideLoading(): void } // ============================= // CLASSES DO FLUIG // ============================= class FLUIGC { static popover( arg0: string, arg1: { trigger: string placement: string template?: string container?: string | boolean maxheight?: string content?: string html?: boolean } ): void static message: message static toast: (options: Toast) => void static loading: (option: unknown) => Loading static modal: (option: ModalSettings, callback?: (err: unknown, data: object) => void) => Modal static datatable: (target: string, options: DatatableOptions) => Datatable static autocomplete(target: string | HTMLElement, options: object, callback?: (error: unknown, data: object) => void): Autocomplete static ajax( options: { url: string contentType?: string dataType?: string type?: HttpMethod data?: unknown async?: boolean }, callback: (err: unknown, data: T) => void ): void static rightbar(options: { appendTo?: string content: string backdrop?: boolean width?: string height?: string | number position?: string }): void static sidebar(options: { title: string content: string actions?: Array<{ label: string bind?: string classType?: string autoClose?: boolean btnLink?: boolean hasIcon?: boolean flaticon?: string }> }): void static calendar: { formatDateTimeZone(date: number | string): string } static utilities: { ctrlIsPressed(event: Event): boolean } static switcher: { onInitSendScope(element: unknown, scope: unknown, arg2: (element: unknown, event: unknown, scope: unknown) => void): unknown enable(arg0: string): unknown disable(arg0: string): unknown setFalse(arg0: string): unknown setTrue(arg0: string): unknown onInit(arg0: string, arg1: (event: unknown) => void): unknown onChange(element: unknown, arg1: (event: unknown, state: unknown) => void): unknown init: ( selector: string, options?: { state?: boolean size?: 'mini' | 'small' | 'normal' | 'large' animate?: boolean disabled?: boolean readonly?: boolean onColor?: 'primary' | 'info' | 'success' | 'warning' | 'danger' | 'default' offColor?: 'primary' | 'info' | 'success' | 'warning' | 'danger' | 'default' onText?: string offText?: string } ) => void } messagePage: (settings: MessagePageSettings) => MessagePageInstance } class Loading { setMessage(message: string): void show(): void hide(): void } class Modal { remove(): void isOpen(): boolean } class Autocomplete { add(a: T): void close(): void destroy(): void disable(a: T): void focus(): void input(): void items(): T[] on(event: AutocompleteEvents, callback: (event: unknown) => void): void open(): void refresh(): void remove(a: T): void removeAll(): void update(a: T): void val(): string val(value: string): void } class message { confirm(settings: ConfirmSettings, callback: ConfirmCallback): void alert(settings: AlertSettings, callback: MessageCallback): void error(settings: ErrorSettings, callback: MessageCallback): void } // ============================= // CLASSES DE WORKFLOW // ============================= class WKFViewAttachment { // Propriedades currentAttachmentSize: number attachmentsDocs: Record jFileUpload: unknown defFullPath: string defHasApprovers: boolean userPermissions: string[] | null workflowDetail: unknown parent: unknown rowsSelected: number[] filter: string | null filterType: 'title' | 'user' | 'activity' filterDateStart: string | null filterDateEnd: string | null keyTimer: number datasUpload: unknown progress: number officeExtensions: string[] // Métodos principais removeAttach(indexes: number[]): void getAllAttachments(): Attachment[] getNewAttachments(): Attachment[] getAttachment(documentId: number): Attachment | undefined openAttachmentView(colleagueId: string, docId: number, docVersion: number): void confirmRemoveAttach(index: number[]): void checkAllAttachments(): void desmarkAllCheckbox(): void selectedRowOpenAttachmentView(): void downloadAttach(indexes: number[]): void downloadAttachments(attachments: string[]): void deleteAttachments(attachments: unknown): void attachEdit(attach: { [key: string]: string }, index: number): void // Métodos de controle updateAttachmentStatus(): void loadAttachments(): void searchTable(el: unknown, ev: unknown): void applyFilters(): void closeFilters(): void clearFilters(el: unknown): void changeSearchField(el: unknown, ev: unknown): void cleanNewAttachmentsDocs(): void updateAttachment(attachment: unknown): void // Métodos de publicação publishFile(index: number): void createFindDocumentModal(index: number): void createPublishModal(index: number, selectedDocument: unknown): void } class Attachment { id: number fullPath: string droppedZipZone: boolean name: string internalId: number newAttach: boolean description: string documentId: number documentType?: string attachedUser: string attachedActivity: string attachedDate: string attachedDateNotFormated?: number attachments: Array<{ attach: boolean principal: boolean fileName: string }> hasOwnSubMenu: boolean enablePublish: boolean enableEdit: boolean enableEditContent: boolean fromUpload: boolean enableDownload: boolean hasMoreOptions: boolean deleted: boolean iconClass: string iconUrl: boolean iconPath?: string colleagueId: string version: number } interface MessagePageSettings { /** Selector CSS do elemento container da Message Page (Ex: '#message-page') */ element: string /** Selector CSS do conteúdo que será manipulado/escondido (Ex: '#target-message-page') */ target: string /** Título principal exibido na tela de feedback */ title: string /** Descrição detalhada da mensagem apresentada */ description: string /** Título que introduz a lista de ações/opções disponíveis */ header: string /** Ativa ou desativa o efeito visual de transição entre as telas */ transitionEffect?: boolean /** Tipo de página de mensagem. Opções válidas: 'default' ou 'success' (possui imagem de fundo) */ messageType?: 'default' | 'success' /** Lista de opções e ações que serão renderizadas para o usuário */ links: MessagePageLink[] /** Configuração do botão de fechamento/retorno da Message Page */ actionClose: MessagePageActionClose } interface MessagePageLink { /** Texto descritivo que aparecerá no item da lista */ description: string /** Atributo 'data-' associado a uma função mapeada (Tem precedência sobre o href) */ bind?: string /** URL para redirecionamento caso o atributo 'bind' não seja utilizado */ href?: string } interface MessagePageActionClose { /** Texto exibido no botão de fechamento (Ex: 'Voltar') */ label: string /** Atributo 'data-' utilizado no bind para escutar o evento de fechamento */ bind?: string /** URL ou destino padrão do link de fechamento (Comumente '#') */ href?: string } interface MessagePageInstance { /** Exibe a tela da Message Page e oculta o elemento alvo (target) */ show(): void /** Oculta a Message Page e restaura a exibição do elemento alvo (target) */ hide(): void } // ============================= // CLASSES DE FORMULÁRIO // ============================= // ============================= // CLASSES DE API // ============================= class WCMAPI { // Propriedades userCode: string tenantURL: string userEmail: string userLogin: string user: string organizationId: number serverURL: string // Métodos de servidor getServerURL(): string getTenantCode(): string getProtectedContextPath(): string getUploadURL(): string // Métodos utilitários convertFtlAsync(): string generateId(): string getUserCode(): string isIe(): boolean isIe9(): boolean // Event listener addListener(obj: unknown, eventName: string, callback: (eventName: string, data: unknown) => void): void // Requisições AJAX Create(options: { url: string async?: boolean data?: { processInstanceId?: number processId?: unknown version?: unknown taskUserId?: unknown completeTask?: unknown currentMovto?: unknown managerMode?: boolean selectedDestinyAfterAutomatic?: unknown conditionAfterAutomatic?: unknown selectedColleague?: unknown comments?: string newObservations?: unknown appointments?: unknown attachments?: unknown pass?: unknown digitalSignature?: unknown formData?: unknown deleteUploadFiles?: unknown isDigitalSigned?: unknown isLinkReturn?: unknown versionDoc?: unknown selectedState?: unknown internalFields?: unknown subProcessId?: unknown subProcessSequence?: unknown transferTaskAfterSelection?: unknown currentState?: number [key: string]: unknown } styleGuide?: boolean success?: (data: { content?: unknown processLinkMessage?: unknown processInstanceId?: string | number currentMovto?: unknown nrDoc?: unknown versionDoc?: unknown status?: number selectedDestinyAfterAutomatic?: unknown conditionAfterAutomatic?: unknown availableUsers?: { isCollectiveTask: unknown; users: unknown } availableStates?: unknown sequence?: unknown subProcessCreated?: null nameFileToBeSigned?: unknown docFileOrigName?: unknown signPath?: unknown [key: string]: unknown }) => void error?: (err: { responseText: string }) => void complete?: (xhr: unknown, status: unknown) => Promise | void }): unknown } class JSInterface { static showCamera(param: string): void } class loading { static setMessage(message: string): void static setVisible(visible: boolean): void } class ECM_WKFView { // Propriedades de estado workflowDetail: boolean more: boolean sendModal: unknown needValidateUser: boolean timeoutSearchColleague: unknown colleaguesAutocomplete: Autocomplete | null showCancel: boolean movimentWindow: boolean reloadingCard: boolean currentEvent: string isCancelable: boolean availableUsersInit: unknown[] // Propriedades de widgets relacionados wkfViewObservation: unknown wkfViewProcess: unknown wkfViewHistory: unknown wkfViewAttachment: WKFViewAttachment | null wkfViewAppointments: unknown // Propriedades de processo detailsProcessInstanceID: number processId: string processInstanceId: number taskUserId: string nrDoc: number versionDoc: number currentMovto: number managerMode: boolean afterRedirectMessage: string // Propriedades de configuração userSearch: string initUser: number urlHistory: string allowComplements: boolean complementsLevel: number buttonTakeTask: boolean newRequest: boolean reloadSvg: boolean messagePage: (settings: MessagePageSettings) => MessagePageInstance // Constantes e configurações WorkflowActions: { SAVE: number MOVE: number } conditionsAutomatic: { selectedDestinyAfterAutomatic: number conditionAfterAutomatic: number } lastSelectedState: unknown // Loading load: { loading?: Loading show(): void hide(): void } // Métodos de ação principais save(): void transfer(): void send(): void sendRequestEvent(): void sendAutomaticRequest(): void cancelAutomaticRequest(): void sendTransferRequest(): void sendRequest(isAutomatic: boolean, isTransfer: boolean, pass?: string): void // Métodos de navegação back(): void backModal(): void backBtn(): void // Métodos de cancelamento cancel(): void cancelRequest(): void // Métodos de controle de interface enableSendButton(): void disableSendButton(): void enableActionButtons(): void disableActionButtons(): void hideModals(): void closeModal(): void // Métodos de modal createUserSelectionModal(processInstanceId: unknown, isFormField: unknown, pass: unknown): void createAdHoc(): void // Métodos de formulário callFormFunction(functionName: string, args: unknown[]): Promise getSelectedColleagues(): unknown getFormData(): unknown // Métodos de atividade selectActivity(): string movimentActivity( completeTask: boolean, formData: unknown, selectedColleague: unknown, selectedState: unknown, showMessage: boolean, isAutomatic: boolean, onComplete: unknown, isReturn: unknown, passValue: string | number | string[], subProcessId: string, subProcessSequence: string, hideModal: boolean, transferTaskAfterSelection: boolean ): void // Métodos de validação validateBeforeSend(activity: unknown, completeTask: unknown, isAutomatic: boolean, pass?: string, isTransfer?: boolean): unknown // Métodos de atualização de status updateAdHocStatus(qtt: number): void updateComplementsStatus(qtt: number): void updateAttachmentStatus(qtt: number): void } } export {}