Files
community_bridge/modules/input/client.lua
T
2025-01-08 06:33:31 -05:00

291 lines
14 KiB
Lua

if GetResourceState('ox_lib') ~= 'started' and GetResourceState('qb-menu') ~= 'started' then return end
-- {
-- header = "Test",
-- submitText = "Bill",
-- inputs = {
-- {
-- text = "Citizen ID (#)", -- text you want to be displayed as a place holder
-- name = "citizenid", -- name of the input should be unique otherwise it might override
-- type = "text", -- type of the input
-- isRequired = true, -- Optional [accepted values: true | false] but will submit the form if no value is inputted
-- -- default = "CID-1234", -- Default text option, this is optional
-- },
-- {
-- text = "Secret Code (Give to Nobody)", -- text you want to be displayed as a place holder
-- name = "code", -- name of the input should be unique otherwise it might override
-- type = "password", -- type of the input
-- isRequired = true, -- Optional [accepted values: true | false] but will submit the form if no value is inputted
-- -- default = "password123", -- Default text option, this is optional
-- },
-- {
-- text = "Bill Price ($)", -- text you want to be displayed as a place holder
-- name = "billprice", -- name of the input should be unique otherwise it might override
-- type = "number", -- type of the input - number will not allow non-number characters in the field so only accepts 0-9
-- isRequired = false, -- Optional [accepted values: true | false] but will submit the form if no value is inputted
-- -- default = 1, -- Default number option, this is optional
-- },
-- {
-- text = "Bill Type", -- text you want to be displayed as a input header
-- name = "billtype", -- name of the input should be unique otherwise it might override
-- type = "radio", -- type of the input - Radio is useful for "or" options e.g; billtype = Cash OR Bill OR bank
-- options = { -- The options (in this case for a radio) you want displayed, more than 6 is not recommended
-- { value = "bill", text = "Bill" }, -- Options MUST include a value and a text option
-- { value = "cash", text = "Cash" }, -- Options MUST include a value and a text option
-- { value = "bank", text = "Bank" } -- Options MUST include a value and a text option
-- },
-- -- default = "cash", -- Default radio option, must match a value from above, this is optional
-- },
-- {
-- text = "Include Tax?", -- text you want to be displayed as a input header
-- name = "taxincl", -- name of the input should be unique otherwise it might override
-- type = "checkbox", -- type of the input - Check is useful for "AND" options e.g; taxincle = gst AND business AND othertax
-- options = { -- The options (in this case for a check) you want displayed, more than 6 is not recommended
-- { value = "gst", text = "10% incl."}, -- Options MUST include a value and a text option
-- { value = "business", text = "35% incl.", checked = true }, -- Options MUST include a value and a text option, checked = true is default value, optional
-- { value = "othertax", text = "15% incl."} -- Options MUST include a value and a text option
-- }
-- },
-- {
-- text = "Some Select", -- text you want to be displayed as a input header
-- name = "someselect", -- name of the input should be unique otherwise it might override
-- type = "select", -- type of the input - Select is useful for 3+ amount of "or" options e.g; someselect = none OR other OR other2 OR other3...etc
-- options = { -- Select drop down options, the first option will by default be selected
-- { value = "none", text = "None" }, -- Options MUST include a value and a text option
-- { value = "other", text = "Other"}, -- Options MUST include a value and a text option
-- { value = "other2", text = "Other2" }, -- Options MUST include a value and a text option
-- { value = "other3", text = "Other3" }, -- Options MUST include a value and a text option
-- { value = "other4", text = "Other4" }, -- Options MUST include a value and a text option
-- { value = "other5", text = "Other5" }, -- Options MUST include a value and a text option
-- { value = "other6", text = "Other6" }, -- Options MUST include a value and a text option
-- },
-- -- default = 'other3', -- Default select option, must match a value from above, this is optional
-- }
-- },
-- })
-- local input = lib.inputDialog('Dialog title', {
-- {type = 'input', label = 'Text input', description = 'Some input description', required = true, min = 4, max = 16},
-- {type = 'number', label = 'Number input', description = 'Some number description', icon = 'hashtag'},
-- {type = 'checkbox', label = 'Simple checkbox'},
-- {type = 'color', label = 'Colour input', default = '#eb4034'},
-- {type = 'date', label = 'Date input', icon = {'far', 'calendar'}, default = true, format = "DD/MM/YYYY"}
-- })
--QB types: text, password, number, radio, checkbox, select,
--
-- "input", "number", "checkbox", "select", "multi-select", "slider", "color", "date", "date-range", "time", "textarea",
Input = {}
-- ox to Qb
function OxTypeToQBType(_type)
if _type == "input" then
return "text"
elseif _type == "number" then
return "number"
elseif _type == "checkbox" then
return "checkbox"
elseif _type == "select" then
return "select"
elseif _type == "multi-select" then
return "select"
elseif _type == "slider" then
return "number"
elseif _type == "color" then
return "text"
elseif _type == "date" then
return "date"
elseif _type == "date-range" then
return "date"
elseif _type == "time" then
return "time"
elseif _type == "textarea" then
return "text"
end
end
function OxToQBInput(data)
local returnData = {}
for i, v in pairs(data) do
local input = {
text = v.label,
name = i,
type = OxTypeToQBType(v.type),
isRequired = v.required,
placeholder = v.default,
}
if v.type == "select" then
input.text = ""
input.options = {
{value = v.value, text = v.label}
}
elseif v.type == "checkbox" then
input.text = ""
input.options = {
{value = v.value, text = v.label}
}
end
table.insert(returnData, input)
end
return returnData
end
-- qb to ox
function QBTypeToOxType(_type)
if _type == "text" then
return "input"
elseif _type == "password" then
return "input"
elseif _type == "number" then
return "number"
elseif _type == "radio" then
return "checkbox"
elseif _type == "checkbox" then
return "checkbox"
elseif _type == "select" then
return "select"
end
end
function QBToOxInput(data)
local returnData = {}
for i, v in pairs(data) do
local input = {
label = v.text,
name = i,
type = QBTypeToOxType(v.type),
required = v.isRequired,
default = v.placeholder,
}
if v.type == "select" then
input.options = {}
for i, v in pairs(v.options) do
table.insert(input.options, {value = v.value, label = v.text})
end
elseif v.type == "checkbox" then
for i, v in pairs(v.options) do
table.insert(returnData, {value = v.value, label = v.text})
end
end
table.insert(returnData, input)
end
return returnData
end
--Open menu
function Input.Open(title, data, isQB, submitText)
if isQB then
local inputs = data.inputs
if BridgeClientConfig.InputSystem == "ox" then
return lib.inputDialog(title, QBToOxInput(inputs))
elseif BridgeClientConfig.InputSystem == "qb" then
return exports['qb-input']:ShowInput({
header = title,
submitText = submitText or "Submit",
inputs = inputs
})
end
else
if BridgeClientConfig.InputSystem == "ox" then
return lib.inputDialog(title, data)
elseif BridgeClientConfig.InputSystem == "qb" then
return exports['qb-input']:ShowInput({
header = title,
submitText = submitText or "Submit",
inputs = OxToQBInput(data)
})
end
end
return id
end
--[[
-- Unit tests
local thisIsQB = {
header = "Test",
submitText = "Bill",
inputs = {
{
text = "Citizen ID (#)", -- text you want to be displayed as a place holder
name = "citizenid", -- name of the input should be unique otherwise it might override
type = "text", -- type of the input
isRequired = true, -- Optional [accepted values: true | false] but will submit the form if no value is inputted
-- default = "CID-1234", -- Default text option, this is optional
},
{
text = "Secret Code (Give to Nobody)", -- text you want to be displayed as a place holder
name = "code", -- name of the input should be unique otherwise it might override
type = "password", -- type of the input
isRequired = true, -- Optional [accepted values: true | false] but will submit the form if no value is inputted
-- default = "password123", -- Default text option, this is optional
},
{
text = "Bill Price ($)", -- text you want to be displayed as a place holder
name = "billprice", -- name of the input should be unique otherwise it might override
type = "number", -- type of the input - number will not allow non-number characters in the field so only accepts 0-9
isRequired = false, -- Optional [accepted values: true | false] but will submit the form if no value is inputted
-- default = 1, -- Default number option, this is optional
},
{
text = "Bill Type", -- text you want to be displayed as a input header
name = "billtype", -- name of the input should be unique otherwise it might override
type = "radio", -- type of the input - Radio is useful for "or" options e.g; billtype = Cash OR Bill OR bank
options = { -- The options (in this case for a radio) you want displayed, more than 6 is not recommended
{ value = "bill", text = "Bill" }, -- Options MUST include a value and a text option
{ value = "cash", text = "Cash" }, -- Options MUST include a value and a text option
{ value = "bank", text = "Bank" } -- Options MUST include a value and a text option
},
-- default = "cash", -- Default radio option, must match a value from above, this is optional
},
{
text = "Include Tax?", -- text you want to be displayed as a input header
name = "taxincl", -- name of the input should be unique otherwise it might override
type = "checkbox", -- type of the input - Check is useful for "AND" options e.g; taxincle = gst AND business AND othertax
options = { -- The options (in this case for a check) you want displayed, more than 6 is not recommended
{ value = "gst", text = "10% incl."}, -- Options MUST include a value and a text option
{ value = "business", text = "35% incl.", checked = true }, -- Options MUST include a value and a text option, checked = true is default value, optional
{ value = "othertax", text = "15% incl."} -- Options MUST include a value and a text option
}
},
{
text = "Some Select", -- text you want to be displayed as a input header
name = "someselect", -- name of the input should be unique otherwise it might override
type = "select", -- type of the input - Select is useful for 3+ amount of "or" options e.g; someselect = none OR other OR other2 OR other3...etc
options = { -- Select drop down options, the first option will by default be selected
{ value = "none", text = "None" }, -- Options MUST include a value and a text option
{ value = "other", text = "Other"}, -- Options MUST include a value and a text option
{ value = "other2", text = "Other2" }, -- Options MUST include a value and a text option
{ value = "other3", text = "Other3" }, -- Options MUST include a value and a text option
{ value = "other4", text = "Other4" }, -- Options MUST include a value and a text option
{ value = "other5", text = "Other5" }, -- Options MUST include a value and a text option
{ value = "other6", text = "Other6" }, -- Options MUST include a value and a text option
},
-- default = 'other3', -- Default select option, must match a value from above, this is optional
}
},
}
local thisIsOx = {
{type = 'input', label = 'Text input', description = 'Some input description', required = true, min = 4, max = 16},
{type = 'number', label = 'Number input', description = 'Some number description', icon = 'hashtag'},
{type = 'checkbox', label = 'Simple checkbox'},
{type = 'color', label = 'Colour input', default = '#eb4034'},
{type = 'date', label = 'Date input', icon = {'far', 'calendar'}, default = true, format = "DD/MM/YYYY"}
}
-- qb to ox
RegisterCommand('inputtest1', function()
Input.Open("Test", thisIsQB, true)
end)
-- ox to qb
RegisterCommand('inputtest2', function()
Input.Open("Test", thisIsOx, false)
end)
--]]