missing_push_after_change_to_linux

This commit is contained in:
KarimAldeen 2024-04-17 00:15:37 +03:00
parent ece9e9d9ed
commit 0820595289
53 changed files with 231 additions and 1985 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg class="Logo" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1367 766.99">
<defs>
<style>
.cls-2 {
fill:white;
}
.cls-3 {
fill: transparent;
}
</style>
</defs>
<g id="Layer_1-2" data-name="Layer 1-2">
<g>
<g>
<g>
<path class="cls-2" d="M540.42,301c0-7.67,0-15.33,.96-22.04,0-1.92,.96-1.92,1.92-2.87,33.54-15.33,54.62-42.17,69-75.71,4.79-11.5,7.67-22.04,8.62-34.5,.96-7.67,0-15.33-2.87-23-4.79-10.54-16.29-15.33-28.75-12.46-16.29,3.83-26.83,15.33-36.42,28.75-11.5,17.25-16.29,37.37-20.12,56.54-6.71,31.62-8.62,63.25-10.54,94.87-1.92,26.83-3.83,53.67-7.67,80.5-.96,4.79-1.92,9.58-2.87,14.37-.96,4.79,0,4.79,3.83,3.83,16.29-3.83,31.62-8.62,46-16.29,31.62-15.33,59.42-35.46,84.33-58.46,45.04-43.12,81.46-92,105.41-149.5,13.42-31.62,21.08-65.17,18.21-99.66,0-3.83,0-8.62-.96-12.46-.96-4.79,.96-6.71,4.79-8.62,8.62-3.83,18.21-4.79,27.79-4.79,6.71,0,13.42,.96,21.08,2.87,14.37,2.87,24.92,12.46,32.58,23.96,.96,.96,1.92,2.87,.96,3.83s-2.87,0-3.83,0c-5.75-1.92-11.5-3.83-18.21-2.87-13.42,.96-22.04,8.62-24.92,23-2.87,10.54-2.87,22.04-2.87,33.54,.96,20.12,3.83,40.25,3.83,60.37,0,5.75-1.92,11.5-4.79,17.25-43.12,71.87-98.71,130.33-172.5,171.54-39.29,22.04-79.54,37.37-123.62,47.92-3.83,.96-5.75,1.92-6.71,5.75-14.37,56.54-39.29,107.33-77.62,151.41-25.87,30.67-56.54,54.62-93.92,69.96-18.21,7.67-37.37,11.5-57.5,6.71-26.83-6.71-42.17-24.92-49.83-50.79-14.37-48.87,8.62-104.46,53.67-132.25,17.25-10.54,35.46-18.21,56.54-17.25,5.75,0,10.54,.96,16.29,1.92,4.79,.96,6.71,3.83,6.71,7.67,.96,13.42-4.79,24.92-14.37,33.54-3.83,3.83-7.67,3.83-12.46,0-4.79-3.83-9.58-7.67-14.37-9.58-18.21-9.58-35.46-5.75-48.87,9.58-13.42,15.33-20.12,33.54-24.92,52.71-3.83,17.25-4.79,34.5-3.83,51.75,.96,10.54,2.87,21.08,8.62,30.67,6.71,10.54,16.29,13.42,27.79,10.54,10.54-2.87,20.12-9.58,27.79-18.21,31.62-31.62,56.54-68.04,73.79-110.21,22.04-55.58,39.29-113.08,47.92-172.5,4.79-33.54,10.54-67.08,20.12-99.66,12.46-42.17,28.75-82.42,56.54-116.91,17.25-21.08,36.42-39.29,63.25-46.96,23-6.71,44.08-3.83,61.33,14.37,10.54,10.54,14.37,23.96,15.33,38.33,1.92,25.87-6.71,48.87-18.21,71.87-18.21,35.46-46,61.33-82.42,77.62q1.92,0,.96,0h0Z"/>
<path class="cls-2" d="M1056.95,437.08c-2.87-2.87-6.71-5.75-9.58-8.62s-3.83-2.87-5.75,.96c-10.54,24.92-22.04,49.83-34.5,74.75-11.5,21.08-23,42.17-39.29,59.42-5.75,6.71-12.46,12.46-20.12,16.29-15.33,7.67-29.71,1.92-36.42-13.42-3.83-7.67-3.83-15.33-3.83-23.96,0-21.08,5.75-41.21,12.46-60.37,7.67-21.08,15.33-41.21,29.71-58.46,9.58-11.5,21.08-22.04,36.42-25.87,6.71-1.92,13.42-.96,19.17,0,1.92,0,2.87,.96,3.83-1.92,9.58-23.96,19.17-48.87,26.83-73.79-3.83,3.83-7.67,8.62-11.5,12.46-9.58,10.54-21.08,21.08-33.54,27.79-27.79,17.25-56.54,13.42-80.5-9.58-14.37-13.42-23-30.67-29.71-48.87-1.92-4.79-3.83-9.58-6.71-15.33-.96,8.62-.96,16.29-2.87,24.92-6.71,46-15.33,92-40.25,132.25-15.33,25.87-37.37,45.04-67.08,53.67-.96,0-1.92,0-2.87,.96-.96,0-1.92,.96-1.92-.96,32.58-10.54,52.71-34.5,66.12-65.17,8.62-20.12,13.42-41.21,17.25-63.25,5.75-38.33,4.79-76.67,4.79-115,0-12.46-1.92-24.92,0-36.42,.96-8.62,4.79-15.33,13.42-19.17,5.75-2.87,10.54-1.92,16.29,.96,7.67,5.75,12.46,13.42,16.29,21.08,9.58,17.25,15.33,36.42,23,54.62,4.79,12.46,10.54,24.92,18.21,36.42,12.46,18.21,24.92,20.12,42.17,6.71,17.25-13.42,30.67-30.67,42.17-48.87,27.79-41.21,50.79-86.25,70.92-132.25,5.75-13.42,11.5-26.83,18.21-39.29,4.79-8.62,12.46-12.46,22.04-11.5,8.62,.96,14.37,6.71,16.29,15.33,1.92,6.71,.96,12.46-.96,19.17-12.46,43.12-26.83,86.25-40.25,128.41-18.21,55.58-37.37,111.16-59.42,164.83-.96,2.87-.96,3.83,.96,5.75,3.83,3.83,6.71,7.67,10.54,12.46q.96,2.87,0,2.87h0Z"/>
<path class="cls-2" d="M561.5,456.25c1.92,3.83,.96,8.62,.96,12.46-.96,44.08,4.79,87.21,22.04,127.46,4.79,12.46,11.5,23,21.08,32.58,17.25,18.21,40.25,23,63.25,12.46,20.12-9.58,35.46-23.96,50.79-40.25,2.87-2.87,5.75-5.75,7.67-9.58,1.92-2.87,4.79-2.87,7.67-1.92,16.29,5.75,28.75,15.33,37.37,29.71,2.87,4.79,2.87,9.58-.96,14.37-15.33,20.12-34.5,35.46-59.42,41.21-22.04,4.79-43.12,.96-63.25-9.58-27.79-14.37-48.87-36.42-66.12-62.29-19.17-29.71-31.62-62.29-38.33-96.79-1.92-8.62-1.92-17.25-2.87-25.87,0-1.92,0-2.87,.96-3.83,5.75-6.71,12.46-13.42,19.17-20.12h0Z"/>
<path class="cls-2" d="M844.21,140.96c0-6.71,4.79-11.5,10.54-11.5s11.5,5.75,11.5,11.5-4.79,11.5-11.5,11.5c-5.75,0-10.54-4.79-10.54-11.5h0Z"/>
</g>
<path class="cls-3" d="M935.25,547.29c-.96-4.79-1.92-8.62-1.92-12.46,.96-32.58,6.71-64.21,21.08-93.91,6.71-12.46,14.37-23.96,27.79-31.62,5.75-2.87,12.46-4.79,19.17-3.83,2.87,0,2.87,.96,1.92,2.87-17.25,41.21-33.54,83.37-55.58,121.71-2.88,6.71-7.67,11.5-12.46,17.25h0Z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -1,54 +0,0 @@
import React from 'react'
const KarimLogo = () => {
return (
<>
<svg
className="KarimLogo"
id="Layer_1"
data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 1367 766.99"
>
<defs>
<style
dangerouslySetInnerHTML={{
__html:
"\n .cls-2 {\n fill:white;\n }\n\n .cls-3 {\n fill: transparent;\n }\n "
}}
/>
</defs>
<g id="Layer_1-2" data-name="Layer 1-2">
<g>
<g>
<g>
<path
className="cls-2"
d="M540.42,301c0-7.67,0-15.33,.96-22.04,0-1.92,.96-1.92,1.92-2.87,33.54-15.33,54.62-42.17,69-75.71,4.79-11.5,7.67-22.04,8.62-34.5,.96-7.67,0-15.33-2.87-23-4.79-10.54-16.29-15.33-28.75-12.46-16.29,3.83-26.83,15.33-36.42,28.75-11.5,17.25-16.29,37.37-20.12,56.54-6.71,31.62-8.62,63.25-10.54,94.87-1.92,26.83-3.83,53.67-7.67,80.5-.96,4.79-1.92,9.58-2.87,14.37-.96,4.79,0,4.79,3.83,3.83,16.29-3.83,31.62-8.62,46-16.29,31.62-15.33,59.42-35.46,84.33-58.46,45.04-43.12,81.46-92,105.41-149.5,13.42-31.62,21.08-65.17,18.21-99.66,0-3.83,0-8.62-.96-12.46-.96-4.79,.96-6.71,4.79-8.62,8.62-3.83,18.21-4.79,27.79-4.79,6.71,0,13.42,.96,21.08,2.87,14.37,2.87,24.92,12.46,32.58,23.96,.96,.96,1.92,2.87,.96,3.83s-2.87,0-3.83,0c-5.75-1.92-11.5-3.83-18.21-2.87-13.42,.96-22.04,8.62-24.92,23-2.87,10.54-2.87,22.04-2.87,33.54,.96,20.12,3.83,40.25,3.83,60.37,0,5.75-1.92,11.5-4.79,17.25-43.12,71.87-98.71,130.33-172.5,171.54-39.29,22.04-79.54,37.37-123.62,47.92-3.83,.96-5.75,1.92-6.71,5.75-14.37,56.54-39.29,107.33-77.62,151.41-25.87,30.67-56.54,54.62-93.92,69.96-18.21,7.67-37.37,11.5-57.5,6.71-26.83-6.71-42.17-24.92-49.83-50.79-14.37-48.87,8.62-104.46,53.67-132.25,17.25-10.54,35.46-18.21,56.54-17.25,5.75,0,10.54,.96,16.29,1.92,4.79,.96,6.71,3.83,6.71,7.67,.96,13.42-4.79,24.92-14.37,33.54-3.83,3.83-7.67,3.83-12.46,0-4.79-3.83-9.58-7.67-14.37-9.58-18.21-9.58-35.46-5.75-48.87,9.58-13.42,15.33-20.12,33.54-24.92,52.71-3.83,17.25-4.79,34.5-3.83,51.75,.96,10.54,2.87,21.08,8.62,30.67,6.71,10.54,16.29,13.42,27.79,10.54,10.54-2.87,20.12-9.58,27.79-18.21,31.62-31.62,56.54-68.04,73.79-110.21,22.04-55.58,39.29-113.08,47.92-172.5,4.79-33.54,10.54-67.08,20.12-99.66,12.46-42.17,28.75-82.42,56.54-116.91,17.25-21.08,36.42-39.29,63.25-46.96,23-6.71,44.08-3.83,61.33,14.37,10.54,10.54,14.37,23.96,15.33,38.33,1.92,25.87-6.71,48.87-18.21,71.87-18.21,35.46-46,61.33-82.42,77.62q1.92,0,.96,0h0Z"
/>
<path
className="cls-2"
d="M1056.95,437.08c-2.87-2.87-6.71-5.75-9.58-8.62s-3.83-2.87-5.75,.96c-10.54,24.92-22.04,49.83-34.5,74.75-11.5,21.08-23,42.17-39.29,59.42-5.75,6.71-12.46,12.46-20.12,16.29-15.33,7.67-29.71,1.92-36.42-13.42-3.83-7.67-3.83-15.33-3.83-23.96,0-21.08,5.75-41.21,12.46-60.37,7.67-21.08,15.33-41.21,29.71-58.46,9.58-11.5,21.08-22.04,36.42-25.87,6.71-1.92,13.42-.96,19.17,0,1.92,0,2.87,.96,3.83-1.92,9.58-23.96,19.17-48.87,26.83-73.79-3.83,3.83-7.67,8.62-11.5,12.46-9.58,10.54-21.08,21.08-33.54,27.79-27.79,17.25-56.54,13.42-80.5-9.58-14.37-13.42-23-30.67-29.71-48.87-1.92-4.79-3.83-9.58-6.71-15.33-.96,8.62-.96,16.29-2.87,24.92-6.71,46-15.33,92-40.25,132.25-15.33,25.87-37.37,45.04-67.08,53.67-.96,0-1.92,0-2.87,.96-.96,0-1.92,.96-1.92-.96,32.58-10.54,52.71-34.5,66.12-65.17,8.62-20.12,13.42-41.21,17.25-63.25,5.75-38.33,4.79-76.67,4.79-115,0-12.46-1.92-24.92,0-36.42,.96-8.62,4.79-15.33,13.42-19.17,5.75-2.87,10.54-1.92,16.29,.96,7.67,5.75,12.46,13.42,16.29,21.08,9.58,17.25,15.33,36.42,23,54.62,4.79,12.46,10.54,24.92,18.21,36.42,12.46,18.21,24.92,20.12,42.17,6.71,17.25-13.42,30.67-30.67,42.17-48.87,27.79-41.21,50.79-86.25,70.92-132.25,5.75-13.42,11.5-26.83,18.21-39.29,4.79-8.62,12.46-12.46,22.04-11.5,8.62,.96,14.37,6.71,16.29,15.33,1.92,6.71,.96,12.46-.96,19.17-12.46,43.12-26.83,86.25-40.25,128.41-18.21,55.58-37.37,111.16-59.42,164.83-.96,2.87-.96,3.83,.96,5.75,3.83,3.83,6.71,7.67,10.54,12.46q.96,2.87,0,2.87h0Z"
/>
<path
className="cls-2"
d="M561.5,456.25c1.92,3.83,.96,8.62,.96,12.46-.96,44.08,4.79,87.21,22.04,127.46,4.79,12.46,11.5,23,21.08,32.58,17.25,18.21,40.25,23,63.25,12.46,20.12-9.58,35.46-23.96,50.79-40.25,2.87-2.87,5.75-5.75,7.67-9.58,1.92-2.87,4.79-2.87,7.67-1.92,16.29,5.75,28.75,15.33,37.37,29.71,2.87,4.79,2.87,9.58-.96,14.37-15.33,20.12-34.5,35.46-59.42,41.21-22.04,4.79-43.12,.96-63.25-9.58-27.79-14.37-48.87-36.42-66.12-62.29-19.17-29.71-31.62-62.29-38.33-96.79-1.92-8.62-1.92-17.25-2.87-25.87,0-1.92,0-2.87,.96-3.83,5.75-6.71,12.46-13.42,19.17-20.12h0Z"
/>
<path
className="cls-2"
d="M844.21,140.96c0-6.71,4.79-11.5,10.54-11.5s11.5,5.75,11.5,11.5-4.79,11.5-11.5,11.5c-5.75,0-10.54-4.79-10.54-11.5h0Z"
/>
</g>
<path
className="cls-3"
d="M935.25,547.29c-.96-4.79-1.92-8.62-1.92-12.46,.96-32.58,6.71-64.21,21.08-93.91,6.71-12.46,14.37-23.96,27.79-31.62,5.75-2.87,12.46-4.79,19.17-3.83,2.87,0,2.87,.96,1.92,2.87-17.25,41.21-33.54,83.37-55.58,121.71-2.88,6.71-7.67,11.5-12.46,17.25h0Z"
/>
</g>
</g>
</g>
</svg>
</>
)
}
export default KarimLogo

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 373 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 64 64"><path fill="currentColor" d="M43.139 2a29.885 29.885 0 0 1 5.121 16.756c0 16.701-13.686 30.24-30.57 30.24a30.656 30.656 0 0 1-15.689-4.285C7.209 54.963 17.93 62 30.318 62C47.816 62 62 47.969 62 30.66C62 17.867 54.246 6.871 43.139 2z"/></svg>

Before

Width:  |  Height:  |  Size: 324 B

View File

@ -1,2 +0,0 @@
[LocalizedFileNames]
Screenshot 2023-11-29 134655.png=@Screenshot 2023-11-29 134655.png,0

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 144 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512"><path fill="currentColor" d="M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96s96-43.1 96-96s-43.1-96-96-96zm246.4 80.5l-94.7-47.3l33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5l-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4l-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3l-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5l47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7l100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4l94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0c-49.9-49.9-49.9-131.1 0-181c49.9-49.9 131.1-49.9 181 0c49.9 49.9 49.9 131.1 0 181z"/></svg>

Before

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 483 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 303 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 470 B

After

Width:  |  Height:  |  Size: 470 B

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1,8 +1,8 @@
import React from 'react';
import { Menu, MenuItem, MenuButton } from '@szhsin/react-menu';
import { useTranslation } from 'react-i18next';
import { Menu, Dropdown } from 'antd';
import { useLanguage, useLanguageMenu } from '../../Hooks/useChangeLanguage';
import i18next from 'i18next';
import type { MenuProps } from 'antd';
export default function Translate() {
const { changeLanguage } = useLanguage();
@ -12,23 +12,31 @@ export default function Translate() {
changeLanguage(newLanguage);
};
const items : MenuProps['items'] = languageOptions.map((option:any,index:number) => ({
key: index,
label: (
<div className='MenuPropsItem' onClick={() => handleLanguageChange(option.code)}>
<img alt='' src={option.icon} width={20} height={20} />
{option.label}
</div>
)
}));
return (
<div className='Translate'>
<Menu menuButton={<MenuButton>
{languageOptions.map((option:any,index:number) => (
option.code === i18next.language ?
<React.Fragment key={index}>
<img alt='' src={option.icon} width={20} height={20} /> {option.label}
</React.Fragment>
: null
))}
</MenuButton>} transition>
{languageOptions.map((option:any) => (
<MenuItem key={option.code} onClick={() => handleLanguageChange(option.code)}>
<img alt='' src={option.icon} width={20} height={20} /> {option.label}
</MenuItem>
))}
</Menu>
<Dropdown menu={{items}} placement="bottomLeft">
<button className="ant-dropdown-link" onClick={e => e.preventDefault()}>
{languageOptions.map((option:any,index:number) => (
option.code === i18next.language ?
<React.Fragment key={index}>
<img alt='' src={option.icon} width={20} height={20} /> {option.label}
</React.Fragment>
: null
))}
</button>
</Dropdown>
</div>
);
}

View File

@ -34,7 +34,7 @@ const DateField = ({ name, label, picker = "date", isDisabled, props, onChange,
>
<DatePicker
picker={picker}
placeholder={placeholder}
placeholder={placeholder ? t(placeholder) : t(name)}
allowClear
className={`${className} w-100`}
defaultValue={getDefaultDate()}

View File

@ -10,9 +10,11 @@ const SearchField = ({ name, label, placeholder, isDisabled, searchBy, option, i
const navigate = useNavigate()
useEffect(() => {
const searchParams = new URLSearchParams(window?.location?.search);
const searchParams = new URLSearchParams(location?.search);
setSearchQuery(searchParams?.get('search') || '');
}, []);
console.log(searchParams);
}, [location]);

View File

@ -1,85 +1,75 @@
import { useEffect } from 'react';
import { initReactI18next, useTranslation } from 'react-i18next';
import i18n from 'i18next';
import translationEN from '../translate/en.json';
import translationAR from '../translate/ar.json';
import translationDE from '../translate/de.json';
import { useEffect } from 'react';
import { initReactI18next, useTranslation } from 'react-i18next';
import i18n from 'i18next';
import translationEN from '../translate/en.json';
import translationAR from '../translate/ar.json';
import translationDE from '../translate/de.json';
const language = localStorage.getItem('language') ?? 'en';
let language = localStorage.getItem('language') ?? 'en';
i18n.use(initReactI18next).init({
resources: {
en: {
translation: translationEN
},
ar: {
translation: translationAR
},
de: {
translation: translationDE
}
i18n.use(initReactI18next).init({
resources: {
en: {
translation: translationEN
},
lng: language ?? "en",
interpolation: {
escapeValue: false
ar: {
translation: translationAR
},
de: {
translation: translationDE
}
});
// console.log(navigator.language,"navigator.language");
export function useLanguage() {
useEffect(() => {
// Define a function to handle language change events
const handleLanguageChange = () => {
const newLanguage = localStorage.getItem('language') ?? 'en';
changeLanguage(newLanguage);
};
// Add an event listener to detect changes in localStorage
window.addEventListener('storage', handleLanguageChange);
// Clean up by removing the event listener when the component unmounts
return () => {
window.removeEventListener('storage', handleLanguageChange);
};
}, []);
const changeLanguage = (newLanguage:any) => {
i18n.changeLanguage(newLanguage);
localStorage.setItem('language', newLanguage);
applyLanguageStyles(newLanguage);
// Refresh the page to apply the language changes
window.location.reload();
};
return { changeLanguage };
}
function applyLanguageStyles(language:any) {
if (language === 'ar') {
document.body.setAttribute('dir', 'rtl');
document.body.classList.remove('de');
document.body.classList.add('ar');
} else if (language === 'en') {
document.body.setAttribute('dir', 'ltr');
document.body.classList.remove('ar', 'de');
document.body.classList.add('en');
} else if (language === 'de') {
document.body.setAttribute('dir', 'ltr');
document.body.classList.remove('ar');
document.body.classList.add('de');
},
lng: language,
interpolation: {
escapeValue: false
}
});
export function useLanguage() {
useEffect(() => {
changeLanguage(language);
}, [language]);
const changeLanguage = (newLanguage:any) => {
i18n.changeLanguage(newLanguage);
localStorage.setItem('language', newLanguage);
applyLanguageStyles(newLanguage);
};
return { changeLanguage };
}
function applyLanguageStyles(language:any) {
if (language === 'ar') {
document.body.setAttribute('dir', 'rtl');
document.body.classList.remove('de');
document.body.classList.add('ar');
} else if (language === 'en') {
document.body.setAttribute('dir', 'ltr');
document.body.classList.remove('ar', 'de');
document.body.classList.add('en');
} else if (language === 'de') {
document.body.setAttribute('dir', 'ltr');
document.body.classList.remove('ar');
document.body.classList.add('de');
}
export function useLanguageMenu() {
const { t } = useTranslation();
}
const languageOptions = [
{ code: 'ar', icon: '/Layout/Ar.svg', label: t('Arabic') },
{ code: 'en', icon: '/Layout/En.svg', label: t('English') },
{ code: 'de', icon: '/Layout/De.svg', label: t('German') }
];
export function useLanguageMenu() {
const { t } = useTranslation();
const { changeLanguage } = useLanguage();
return { languageOptions };
}
const languageOptions = [
{ code: 'ar', icon: '/language/ar.svg', label: t('Arabic') },
{ code: 'en', icon: '/language/en.svg', label: t('English') },
{ code: 'de', icon: '/language/de.svg', label: t('German') }
];
const handleLanguageChange = (code:any) => {
changeLanguage(code);
};
return { languageOptions, handleLanguageChange };
}

View File

@ -2,22 +2,12 @@ import React from 'react'
import { UserImageURL } from './Const'
import Translate from '../../Components/Utils/Translate'
import { useTranslation } from 'react-i18next'
import { Menu, MenuItem, MenuButton } from '@szhsin/react-menu';
import '@szhsin/react-menu/dist/index.css';
import '@szhsin/react-menu/dist/transitions/slide.css';
import Theme from '../../Components/Utils/Theme';
import { TOKEN_KEY } from '../../config/AppKey';
import { useNavigate } from 'react-router-dom';
import useAuthState from '../../lib/state mangment/AuthState';
import { GiHamburgerMenu } from 'react-icons/gi';
import WithDrawer from './WithDrawer';
import Sidebar from './SideBar';
type TUserData =
{
username: string | null,
role: string | null
}
import { Dropdown, type MenuProps } from 'antd';
const Header = () => {
@ -33,6 +23,14 @@ const Header = () => {
}
const items: MenuProps['items'] = [
{
key: '1',
label: (
<div onClick={handelClick}>{t("Log Out")}</div>
),
},
];
return (
<div className='Header'>
@ -49,22 +47,13 @@ const Header = () => {
</WithDrawer>
</div>
<div className='Header_Right'>
{/* <Theme /> */}
<Translate />
<Menu menuButton={<MenuButton>
<div className='User_Pro'>
<div className='User_info'>
{/* <h6>{user?.full_name}</h6> */}
{/* <p> {user?.role_type} </p> */}
</div>
<Dropdown menu={{ items }} placement="bottomLeft">
<div className='User_Pro'>
<img className='UNK_User' src={UserImageURL} alt='' width={40} height={40} />
</div>
</MenuButton>} transition>
<MenuItem onClick={handelClick}>{t("Log Out")}</MenuItem>
</Menu>
</Dropdown>

View File

@ -69,7 +69,7 @@ export const TabsContainer= ({parentKey}:any) => {
setItems([...items, newItem]);
setActiveKey(newKey);
const originalValues = values?.Attribute[parentKey].AttributeValue[targetKey];
const originalValues = values?.Attribute[parentKey]?.AttributeValue?.[targetKey];
setFieldValue(`Attribute[${parentKey}].AttributeValue[${newKey}]`, {...originalValues,id:null});
}
};

View File

@ -227,9 +227,9 @@ const AddcategoriesPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("attributes")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("attributes")}</h6></div></Tab>
</TabList>

View File

@ -506,8 +506,8 @@ const EditPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("attributes")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("attributes")}</h6></div></Tab>
</TabList>

View File

@ -55,7 +55,7 @@ const AddCouponPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>

View File

@ -85,7 +85,7 @@ const EditPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>
</TabList>
<TabBody >

View File

@ -17,21 +17,21 @@ export default function HomePage() {
{
icon: <FaUser className="warning" size={20} />,
count: data?.userCount, // Example count
pathWhenClick: '/',
pathWhenClick: '/users',
titleKey: "userCount",
contentKey: "user_in_your_Application"
},
{
icon: <FaProductHunt className="warning" size={20} />,
count: data?.productCount, // Example count
pathWhenClick: "/",
pathWhenClick: "/products",
titleKey: "productCount",
contentKey: "Product_Count_in_your_Application"
},
{
icon: <FaFirstOrder className="warning" size={20} />,
count: data?.orderCount, // Example count
pathWhenClick: "/",
pathWhenClick: "/order",
titleKey: "orderCount",
contentKey: "order_count_in_your_Application"
}
@ -49,8 +49,8 @@ export default function HomePage() {
<StatisticsCard
pathWhenClick={card.pathWhenClick}
icon={card.icon}
count={`${card.count ?? 1}`}
CardContent={t(`You_have`) + " " + ((card.count) ?? 1) + " " + t(card.contentKey)}
count={`${card.count ?? ""}`}
CardContent={t(`You_have`) + " " + ((card.count) ?? "") + " " + t(card.contentKey)}
CardTitle={t(card.titleKey)}
/>
</div>

View File

@ -55,7 +55,7 @@ function Form() {
<ValidationField name="title_de" />
{/* <ValidationField name="meta" /> */}
<ValidationField name="user_ids" label='user' type="Search" option={option} searchBy={"name"} isMulti />
<ValidationField name="user_ids" placeholder='user' label='user' type="Search" option={option} searchBy={"name"} isMulti />
</Col>

View File

@ -64,7 +64,7 @@ const AddPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>

View File

@ -83,9 +83,9 @@ const AddProductPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleInfo'>{t("Base_info")} </h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleInfo'>{t("Base_info")} </h6></div></Tab>
<Tab ><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><BsInfoCircle size={20} /></span> <h6 className='SingleInfo'>{t("VarianInfo")}</h6></div></Tab>
<Tab ><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><BsInfoCircle size={20} /></span> <h6 className='SingleInfo'>{t("VarianInfo")}</h6></div></Tab>
</TabList>

View File

@ -352,9 +352,9 @@ console.log(mappedAttributes, "mappedAttributes");
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("Base_info")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("Base_info")}</h6></div></Tab>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><BsInfoCircle size={20} /></span> <h6 className='SingleDriverInfo'>{t("VarianInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><BsInfoCircle size={20} /></span> <h6 className='Tab_Info'>{t("VarianInfo")}</h6></div></Tab>
</TabList>

View File

@ -35,7 +35,7 @@ const AddSliderPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>

View File

@ -60,7 +60,7 @@ const EditPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>
</TabList>
<TabBody >

View File

@ -34,7 +34,7 @@ const AddSupportMessagesPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>

View File

@ -57,7 +57,7 @@ const AddPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>

View File

@ -46,7 +46,7 @@ const EditPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>
</TabList>
<TabBody >

View File

@ -102,7 +102,7 @@ const useTableColumns: any = () => {
},
],
[]
[t]
);
};

View File

@ -3,17 +3,19 @@ import React from 'react'
import { Col, Row } from 'reactstrap';
import ValidationField from '../../../Components/ValidationField/ValidationField';
import { FaCheck, FaTimes, FaClock, FaBan } from 'react-icons/fa';
import { useTranslation } from 'react-i18next';
function Form() {
const [t] = useTranslation()
// 'pending_approve', 'approved', 'rejected', 'pending_cancellation', 'cancelled'
const stateSelect = [
{ label: <div className='orderStatus_select'><FaClock /> Pending Approve</div>, value: "pending_approve" },
{ label: <div className='orderStatus_select'><FaCheck /> Approved</div>, value: "approved" },
{ label: <div className='orderStatus_select'><FaTimes /> Rejected</div>, value: "rejected" },
{ label: <div className='orderStatus_select'><FaBan /> Pending Cancellation</div>, value: "pending_cancellation" }
{ label: <div className='orderStatus_select'><FaClock /> {t("Pending Approve")}</div>, value: "pending_approve" },
{ label: <div className='orderStatus_select'><FaCheck /> {t("Approved")}</div>, value: "approved" },
{ label: <div className='orderStatus_select'><FaTimes /> {t("Rejected")}</div>, value: "rejected" },
{ label: <div className='orderStatus_select'><FaBan /> {t("Pending Cancellation")}</div>, value: "pending_cancellation" }
];

View File

@ -79,9 +79,9 @@ const EditPage = () => {
<ViewPage {...ViewProps}>
<Tabs>
<TabList>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><FaEdit size={20} /></span> <h6 className='SingleDriverInfo'>{t("EditDetails")}</h6></div></Tab>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='SingleDriverInfo'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='SignleDriverContainer'><span className='SignleDriverInfoIcon'><FaFirstOrderAlt size={20} /></span> <h6 className='SingleDriverInfo'>{t("OrderItems")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><FaEdit size={20} /></span> <h6 className='Tab_Info'>{t("EditDetails")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><MdLanguage size={20} /></span> <h6 className='Tab_Info'>{t("BasicInfo")}</h6></div></Tab>
<Tab><div className='Tab_Info_Container'><span className='SignleDriverInfoIcon'><FaFirstOrderAlt size={20} /></span> <h6 className='Tab_Info'>{t("OrderItems")}</h6></div></Tab>
</TabList>
<TabBody >

View File

@ -26,12 +26,13 @@ const OrderPage = () => {
const columns = useTableColumns();
/// Coupon status Created from -> to Price from => to
const [t] = useTranslation()
// 'pending_approve', 'approved', 'rejected', 'pending_cancellation', 'cancelled'
const stateSelect = [
{ label: <div className='orderStatus_select'><FaClock /> Pending Approve</div>, value: "pending_approve" },
{ label: <div className='orderStatus_select'><FaCheck /> Approved</div>, value: "approved" },
{ label: <div className='orderStatus_select'><FaTimes /> Rejected</div>, value: "rejected" },
{ label: <div className='orderStatus_select'><FaBan /> Pending Cancellation</div>, value: "pending_cancellation" }
{ label: <div className='orderStatus_select'><FaClock /> {t("Pending Approve")}</div>, value: "pending_approve" },
{ label: <div className='orderStatus_select'><FaCheck /> {t("Approved")}</div>, value: "approved" },
{ label: <div className='orderStatus_select'><FaTimes /> {t("Rejected")}</div>, value: "rejected" },
{ label: <div className='orderStatus_select'><FaBan /> {t("Pending Cancellation")}</div>, value: "pending_cancellation" }
];
const { data: Coupon } = useGetCoupon()
@ -49,8 +50,9 @@ const OrderPage = () => {
const handleSubmit = () => {
let queryParams = [];
console.log(username);
if (username !== null) {
if (username !== null && username!== "" ) {
queryParams.push(`username=${username}`);
}
if (coupon !== null) {
@ -86,7 +88,6 @@ const OrderPage = () => {
}
const [t] = useTranslation()
return (

View File

@ -25,7 +25,7 @@ const CustomDateRange = () => {
format={dateFormat}
onChange={onCalendarChange}
className="CustomDateRange"
placeholder={[t(`PriceFrom`),t(`PriceTo`)]}
placeholder={[t(`DateFrom`),t(`DateTo`)]}
/>
)
}

View File

@ -18,7 +18,7 @@ const CustomSearchField = ({ searchBy }: any) => {
if (value || value !== "") {
setUsername(value)
} else {
setUsername(value)
setUsername(null)
}
}

View File

@ -11,7 +11,7 @@
@import '../component/printButton.scss';
@import '../component/DarkStyle.scss';
@import '../component/ErrorPage.scss';
@import '../component/SingleDriverInfo.scss';
@import '../component/Tab_Info.scss';
@import '../component/DriverInfoSocket.scss';
@import '../component/radio.scss';

View File

@ -12,20 +12,7 @@
}
@mixin GlassModeBG{
background-image: url("../../../public/Layout/mac.webp");
width: 100%;
background-size: cover;
background-position: center;
min-height: 100vh;
display: flex; justify-content: center; align-items: center;
}
@mixin GlassBG{
background-image: url("../../../public/Layout/mac.webp");
width: 100%;
background-size: cover;
background-position: center;
}
@mixin GlassModeCover{

View File

@ -43,7 +43,7 @@
}
.Header_Right{
padding-inline: 5px;
direction: ltr;
@include Flex ;
.Setting{
@ -110,3 +110,11 @@
}
}
}
.ant-dropdown-link{
all: unset;
}
.MenuPropsItem{
display: flex;
gap: 10px;
}

View File

@ -139,128 +139,7 @@ background: var(--bg);
.glass{
.Layout_Children{
max-height: 500px;
overflow-y: auto;
overflow-x: hidden
}
.modal { @include GlassModeBG; }
.DashboardLayout {
background-image: url("../../../public/Layout/mac.webp");
max-height: 200px;
}
.modal-content{
@include GlassModeCover;
}
.DashboardLayout_Cover{
@include GlassModeCover;
}
.LayoutBody{
// overflow-y: scroll;
height: 400px;
overflow-y: auto;
}
::-webkit-scrollbar { min-width: 15px; width: 100%; }
::-webkit-scrollbar-track { box-shadow: inset 0 0 5px var(--primary); }
::-webkit-scrollbar-thumb {
background:transparent no-repeat center center ;
background-size: cover;
&:hover{
background:var(--primary) no-repeat center center ;
cursor: pointer !important;
}
}
.react-tabs__tab::after{
border-bottom: 4px solid var(--primary) !important;
}
.progress, .progress-stacked{
background-color: var(--bg2) !important;
}
button{
background: none !important;
color: var(--primary);
}
.react-confirm-alert div .sweet-alert{
background-color:transparent !important;
@include GlassModeCover;
border: 1px solid var(--primary);
color: var(--primary);
.btn-primary{
background-color: transparent ;
border: 1px solid var(--primary);
&:hover {
background-color: rgba(16 18 27 / 40%);
backdrop-filter: blur(24px);
}
}
}
.react-confirm-alert{
max-height: 100px;
}
.react-confirm-alert > div > div > div{
@include GlassModeBG;
max-height: 100px;
}
.Add_Button{
button {
box-shadow: 2px 2px 1px 0 var(--primary);
}
button:hover {
background-color: rgba(16 18 27 / 40%);
backdrop-filter: blur(24px);
}
}
.btn-secondary{
box-shadow: 2px 2px 1px 0 var(--primary);
&:hover {
background-color: rgba(16 18 27 / 40%);
backdrop-filter: blur(24px);
}
}
.sc-bdvvtL .sc-hGPBjI .sc-pVTFL{
background-color:transparent;
color:var(--text);
}
.react-tabs__tab-panel--selected .ValidationField .ant-input-affix-wrapper,.modal-body .ValidationField .ant-input-affix-wrapper{
background-color:transparent;
}
/* Input */
.react-tabs__tab-panel--selected .ValidationField input[type=text],.modal-body .ValidationField input{
background-color:transparent;
color:var(--text)!important;
&::placeholder{
color: var(--text);
}
}
}
.ViewPage{
.card-header{
@ -484,6 +363,9 @@ padding: 10px 40px;
display:none;
}
.Page_Header{
flex-wrap: wrap;
}
}
@ -524,7 +406,21 @@ padding: 10px 40px;
}
}
.ar{
.AddNewTabText{
text-wrap: nowrap !important;
margin-right: 60px;
transform: translateY(-30px);
}
@media screen and (max-width: 1000px) {
.AddNewTabText{
transform: translateY(-50px);
}
}
}
/* Dynamic form complex */
#dynamic_form_complex{
margin-bottom:5px;
@ -617,7 +513,7 @@ padding: 10px 40px;
}
.CustomDateRange{
width: 300px;
width: 240px;
}
.OrderDetails{
padding: 20px 4vw ;
@ -642,3 +538,11 @@ padding: 10px 40px;
}
}
.ar{
.ant-tabs >.ant-tabs-nav{
direction: ltr !important;
}
}

View File

@ -1,9 +1,10 @@
.SignleDriverContainer{
.Tab_Info_Container{
display: flex;justify-content: start;align-items: center;
.SingleDriverInfo{
.Tab_Info{
font-size: 1.4vw;
padding-left: .5vw;
margin-bottom: 0;
}
.SignleDriverInfoIcon{
svg{

View File

@ -8,4 +8,4 @@ const API = {
LOGIN: `admin/login`,
LOGOUT: `/api/admin/logout`,
};
export const useLoginAdmin = ()=>useAddMutation(KEY , API.LOGIN)
export const useLoginAdmin = ()=>useAddMutation(KEY , API.LOGIN,"login_successful")

View File

@ -9,7 +9,7 @@ type AxiosResponse = {
success:true
};
function useAddMutation(key: string, url: string): UseMutationResult<AxiosResponse, unknown, any, unknown> {
function useAddMutation(key: string, url: string,message?:string): UseMutationResult<AxiosResponse, unknown, any, unknown> {
const axios = useAxios();
const [t] = useTranslation();
const queryClient = useQueryClient();
@ -26,7 +26,7 @@ function useAddMutation(key: string, url: string): UseMutationResult<AxiosRespo
{
onSuccess: (data) => {
queryClient.invalidateQueries([key]);
toast.success(data.message || t("added_successful"));
toast.success(data.message || t(message??"") || t("added_successful"));
},
onError: (error:any) => {
const message = error?.response?.data?.message || t("failed_to_add_data");

View File

@ -174,7 +174,17 @@
"id": "المعرف",
"submite": "تقديم",
"PriceFrom": "السعر من",
"PriceTo": "السعر إلى"
"PriceTo": "السعر إلى",
"Pending Approve": "قيد الموافقة",
"Approved": "تمت الموافقة عليه",
"Rejected": "مرفوض",
"Pending Cancellation": "في انتظار الإلغاء",
"user_ids": "معرفات المستخدمين",
"user": "مستخدم",
"login_successful": "تسجيل الدخول ناجح",
"DateFrom": "تاريخ البدء",
"DateTo": "تاريخ الانتهاء"

View File

@ -172,7 +172,18 @@
"id": "ID",
"submite": "Einreichen",
"PriceFrom": "Preis ab",
"PriceTo": "Preis bis"
"PriceTo": "Preis bis",
"Pending Approve": "Ausstehende Genehmigung",
"Approved": "Genehmigt",
"Rejected": "Abgelehnt",
"Pending Cancellation": "Ausstehende Stornierung",
"user_ids": "Benutzer-IDs",
"user": "Benutzer",
"login_successful": "Anmeldung erfolgreich",
"DateFrom": "Datum von",
"DateTo": "Datum bis"

View File

@ -177,6 +177,15 @@
"id": "ID",
"submite": "Submit",
"PriceFrom": "Price From",
"PriceTo": "Price To"
"PriceTo": "Price To",
"Pending Approve": "Pending Approve",
"Approved": "Approved",
"Rejected": "Rejected",
"Pending Cancellation": "Pending Cancellation",
"user_ids": "User IDs",
"user": "User",
"login_successful": "Login successful",
"DateFrom": "Date From",
"DateTo": "Date To"
}