72 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
|     https://github.com/overextended/ox_lib
 | |
| 
 | |
|     This file is licensed under LGPL-3.0 or higher <https://www.gnu.org/licenses/lgpl-3.0.en.html>
 | |
| 
 | |
|     Copyright © 2025 Linden <https://github.com/thelindat>
 | |
| ]]
 | |
| 
 | |
| ---@type promise?
 | |
| local alert = nil
 | |
| local alertId = 0
 | |
| 
 | |
| ---@class AlertDialogProps
 | |
| ---@field header string;
 | |
| ---@field content string;
 | |
| ---@field centered? boolean?;
 | |
| ---@field size? 'xs' | 'sm' | 'md' | 'lg' | 'xl';
 | |
| ---@field overflow? boolean?;
 | |
| ---@field cancel? boolean?;
 | |
| ---@field labels? {cancel?: string, confirm?: string}
 | |
| 
 | |
| ---@param data AlertDialogProps
 | |
| ---@param timeout? number Force the window to timeout after `x` milliseconds.
 | |
| ---@return 'cancel' | 'confirm' | nil
 | |
| function lib.alertDialog(data, timeout)
 | |
|     if alert then return end
 | |
| 
 | |
|     local id = alertId + 1
 | |
|     alertId = id
 | |
|     alert = promise.new()
 | |
| 
 | |
|     lib.setNuiFocus(false)
 | |
|     SendNUIMessage({
 | |
|         action = 'sendAlert',
 | |
|         data = data
 | |
|     })
 | |
| 
 | |
|     if timeout then
 | |
|         SetTimeout(timeout, function()
 | |
|             if id == alertId then lib.closeAlertDialog('timeout') end
 | |
|         end)
 | |
|     end
 | |
| 
 | |
|     return Citizen.Await(alert)
 | |
| end
 | |
| 
 | |
| ---@param reason? string An optional reason for the window to be closed.
 | |
| function lib.closeAlertDialog(reason)
 | |
|     if not alert then return end
 | |
| 
 | |
|     lib.resetNuiFocus()
 | |
|     SendNUIMessage({
 | |
|         action = 'closeAlertDialog'
 | |
|     })
 | |
| 
 | |
|     local p = alert
 | |
|     alert = nil
 | |
| 
 | |
|     if reason then p:reject(reason) else p:resolve() end
 | |
| end
 | |
| 
 | |
| RegisterNUICallback('closeAlert', function(data, cb)
 | |
|     cb(1)
 | |
|     lib.resetNuiFocus()
 | |
| 
 | |
|     local promise = alert --[[@as promise]]
 | |
|     alert = nil
 | |
| 
 | |
|     promise:resolve(data)
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('ox_lib:alertDialog', lib.alertDialog)
 | 
