missing_push_after_change_to_linux
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
|
@ -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 |
|
|
@ -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
|
||||
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 373 KiB |
|
|
@ -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 |
|
|
@ -1,2 +0,0 @@
|
|||
[LocalizedFileNames]
|
||||
Screenshot 2023-11-29 134655.png=@Screenshot 2023-11-29 134655.png,0
|
||||
|
Before Width: | Height: | Size: 144 KiB |
|
|
@ -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 |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 483 KiB |
|
Before Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 470 B After Width: | Height: | Size: 470 B |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()}
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,23 +47,14 @@ 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>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -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});
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 >
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 >
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 >
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ const useTableColumns: any = () => {
|
|||
},
|
||||
|
||||
],
|
||||
[]
|
||||
[t]
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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" }
|
||||
];
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 >
|
||||
|
|
|
|||
|
|
@ -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 = [];
|
||||
|
||||
if (username !== null) {
|
||||
console.log(username);
|
||||
|
||||
if (username !== null && username!== "" ) {
|
||||
queryParams.push(`username=${username}`);
|
||||
}
|
||||
if (coupon !== null) {
|
||||
|
|
@ -86,7 +88,6 @@ const OrderPage = () => {
|
|||
|
||||
|
||||
}
|
||||
const [t] = useTranslation()
|
||||
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ const CustomDateRange = () => {
|
|||
format={dateFormat}
|
||||
onChange={onCalendarChange}
|
||||
className="CustomDateRange"
|
||||
placeholder={[t(`PriceFrom`),t(`PriceTo`)]}
|
||||
placeholder={[t(`DateFrom`),t(`DateTo`)]}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ const CustomSearchField = ({ searchBy }: any) => {
|
|||
if (value || value !== "") {
|
||||
setUsername(value)
|
||||
} else {
|
||||
setUsername(value)
|
||||
setUsername(null)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
||||
|
|
|
|||
|
|
@ -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{
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
}
|
||||
.Header_Right{
|
||||
padding-inline: 5px;
|
||||
|
||||
direction: ltr;
|
||||
@include Flex ;
|
||||
.Setting{
|
||||
|
||||
|
|
@ -109,4 +109,12 @@
|
|||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-dropdown-link{
|
||||
all: unset;
|
||||
}
|
||||
.MenuPropsItem{
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
}
|
||||
|
|
@ -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 ;
|
||||
|
|
@ -641,4 +537,12 @@ padding: 10px 40px;
|
|||
white-space: nowrap;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
.ar{
|
||||
.ant-tabs >.ant-tabs-nav{
|
||||
direction: ltr !important;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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{
|
||||
|
|
@ -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")
|
||||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -174,7 +174,17 @@
|
|||
"id": "المعرف",
|
||||
"submite": "تقديم",
|
||||
"PriceFrom": "السعر من",
|
||||
"PriceTo": "السعر إلى"
|
||||
"PriceTo": "السعر إلى",
|
||||
"Pending Approve": "قيد الموافقة",
|
||||
"Approved": "تمت الموافقة عليه",
|
||||
"Rejected": "مرفوض",
|
||||
"Pending Cancellation": "في انتظار الإلغاء",
|
||||
"user_ids": "معرفات المستخدمين",
|
||||
"user": "مستخدم",
|
||||
"login_successful": "تسجيل الدخول ناجح",
|
||||
"DateFrom": "تاريخ البدء",
|
||||
"DateTo": "تاريخ الانتهاء"
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
}
|
||||