[Help] Opening ESX menu in server.lua?

Hello. Here’s my code:

server.lua

-- Statistics / Stats
RegisterCommand('stats', function(source, args, rawCommand)
	local msg = rawCommand:sub(7)
	local xPlayer = ESX.GetPlayerFromId(source)

	getIdentity(source, function(data)
        local firstname = data.firstname
		local lastname = data.lastname
		local gender
		if data.sex == "M" then
			gender = "Mężczyzna"
		elseif gender == "K" then
			gender = "Kobieta"
		end
		local job
		local job_grade
		if xPlayer.job.name == "legion" then
			job = "Death Legion"
			if xPlayer.job.grade_name == "boss" then
				job_grade = "Wielki Mistrz"
			end
		end
		local specialization
		if data.specialization == "doctor" then
			specialization = "Lekarz"
		end
  
		OpenStatsMenu(firstname, lastname, gender, job, job_grade, specialization)
		TriggerClientEvent('chat:addMessage', -1, {
			template = '<div style="padding: 0.5vw; margin: 0.5vw; background-color: rgb(176, 0, 0, 0.6); border-radius: 3px;"><i class="fas fa-skull"></i></i>Imię: {0} Nazwisko: {1} Płeć: {2} Frakcja: {3} Ranga: {4} Specjalizacja: {5}</div>',
			args = { firstname, lastname, gender, job, job_grade, specialization }
		})
    end)
  end, false)

  function OpenStatsMenu(firstname, lastname, gender, job, job_grade, specialization)

	local playerPed = PlayerPedId()
	local grade = PlayerData.job.grade_name

	local elements = {
    { label = "Imię:", value = 'firstname' },
    { label = "Nazwisko:", value = 'lastname' },
	}

	ESX.UI.Menu.CloseAll()

	ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'cloakroom',
	{
    align    = 'center',
    title =  'Statystyki',
		elements = elements
	}, function(data, menu)
		menu.close()
	end)
end

Making chat message works cool if I remove Menu lines but how can I make ESX Menu to show up with these elements? Can I make these in server.lua or do I need to trigger client event which will show the menu? Any tips appreciated.