85 lines
		
	
	
		
			No EOL
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			No EOL
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local dialogRes
 | |
| 
 | |
| FM.dialog = {}
 | |
| 
 | |
| ---@class DialogProps
 | |
| ---@field title? string
 | |
| ---@field message? string
 | |
| ---@field confirmLabel? string
 | |
| ---@field cancelLabel? string
 | |
| ---@field canCancel? boolean
 | |
| ---@field size? 'sm' | 'md' | 'lg'
 | |
| ---@field keepInput? boolean
 | |
| ---@field useSfx? boolean
 | |
| 
 | |
| local function setDefaultProps(props)
 | |
|     if not props then props = {} end
 | |
|     props.title = props.title or ''
 | |
|     props.message = props.message or ''
 | |
|     props.confirmLabel = props.confirmLabel or 'Confirm'
 | |
|     props.cancelLabel = props.cancelLabel or 'Cancel'
 | |
|     props.size = props.size or 'md'
 | |
|     if props.keepInput == nil then props.keepInput = false end
 | |
|     if props.useSfx == nil then props.useSfx = true end
 | |
| 
 | |
|     return props
 | |
| end
 | |
| 
 | |
| ---@param props DialogProps | nil
 | |
| function FM.dialog.open(props)
 | |
|     if dialogRes then FM.console.err('Dialog already open') return end
 | |
|     
 | |
|     props = setDefaultProps(props)
 | |
|     dialogRes = promise.new()
 | |
|     
 | |
|     SetNuiFocus(true, true)
 | |
|     SetNuiFocusKeepInput(props.keepInput)
 | |
| 
 | |
|     SendNUIMessage({
 | |
|         action = 'openDialog',
 | |
|         data = props
 | |
|     })
 | |
| 
 | |
|     return Citizen.Await(dialogRes)
 | |
| end
 | |
| 
 | |
| ---@param result 'cancel' | 'confirm'
 | |
| function FM.dialog.close(result)
 | |
|     if not dialogRes then FM.console.err('No dialog open') return end
 | |
| 
 | |
|     SendNUIMessage({
 | |
|         action = 'closeDialog',
 | |
|         data = result
 | |
|     })
 | |
| end
 | |
| 
 | |
| RegisterNUICallback('dialogClosed', function(res, cb)
 | |
|     SetNuiFocus(false, false)
 | |
|     SetNuiFocusKeepInput(false)
 | |
| 
 | |
|     if dialogRes then
 | |
|         dialogRes:resolve(res)
 | |
|         dialogRes = nil
 | |
|     end
 | |
| 
 | |
|     cb(true)
 | |
| end)
 | |
| 
 | |
| ---@return boolean
 | |
| function FM.dialog.isOpen()
 | |
|     return dialogRes ~= nil
 | |
| end
 | |
| 
 | |
| --[[ EXAMPLE FOR NOW HERE ]]
 | |
| -- RegisterCommand('opendialog', function (source, args, raw)
 | |
| --     local result = FM.dialog.open({
 | |
| --         title = 'Test',
 | |
| --         message = 'This is a test dialog',
 | |
| --         size = 'lg'
 | |
| --     })
 | |
| --     FM.console.debug(result)
 | |
| -- end)
 | |
| 
 | |
| -- RegisterCommand('closedialog', function (source, args, raw)
 | |
| --     FM.dialog.close('confirm')
 | |
| -- end) | 
