Merge branch 'staging'
This commit is contained in:
commit
935af033a6
34
.gitea/workflows/deploy.yml
Normal file
34
.gitea/workflows/deploy.yml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
name: Deploy
|
||||||
|
run-name: ${{ gitea.actor }} build image and push to container registry
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "main"
|
||||||
|
- "staging"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CreateImage:
|
||||||
|
runs-on: [skeris]
|
||||||
|
uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/build-image.yml@v1.1.6-p
|
||||||
|
with:
|
||||||
|
runner: skeris
|
||||||
|
secrets:
|
||||||
|
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
||||||
|
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||||
|
DeployService:
|
||||||
|
runs-on: [frontstaging]
|
||||||
|
container:
|
||||||
|
image: gitea.pena:3000/penadevops/container-images/node-compose:main
|
||||||
|
env:
|
||||||
|
GITHUB_RUN_NUMBER: "${{ inputs.actionid }}"
|
||||||
|
volumes:
|
||||||
|
- /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock
|
||||||
|
steps:
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: http://gitea.pena:3000/PenaDevops/actions.git/checkout@v1
|
||||||
|
- run: printenv
|
||||||
|
- run: GITHUB_RUN_NUMBER=${{ gitea.run_id }} compose -f deployments/${{ gitea.ref_name }}/docker-compose.yaml up -d
|
||||||
|
# uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/deploy.yml@v1.1.6-p
|
||||||
|
# with:
|
||||||
|
# runner: frontstaging
|
1
.yarnrc
Normal file
1
.yarnrc
Normal file
@ -0,0 +1 @@
|
|||||||
|
"@frontend:registry" "http://gitea.pena/api/packages/skeris/npm/"
|
16
Dockerfile
Normal file
16
Dockerfile
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
FROM gitea.pena/penadevops/container-images/node-compose:main as build
|
||||||
|
|
||||||
|
RUN apk update && rm -rf /var/cache/apk/*
|
||||||
|
WORKDIR /usr/app
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN npm install --force && yarn cache clean
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
|
||||||
|
FROM gitea.pena/penadevops/container-images/nginx:main as result
|
||||||
|
WORKDIR /usr/share/nginx/html
|
||||||
|
COPY --from=build /usr/app/build/ /usr/share/nginx/html
|
||||||
|
COPY admin.conf /etc/nginx/conf.d/default.conf
|
||||||
|
COPY cert.pem /etc/nginx/cert.pem
|
||||||
|
COPY key.pem /etc/nginx/key.pem
|
12
Taskfile.yml
Normal file
12
Taskfile.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
build-image:
|
||||||
|
cmds:
|
||||||
|
- podman build -t gitea.pena/penaside/adminfront:$(git rev-parse --abbrev-ref HEAD).$(git rev-parse HEAD) .
|
||||||
|
push:
|
||||||
|
cmds:
|
||||||
|
- task: build-image
|
||||||
|
- cmd: podman login gitea.pena
|
||||||
|
- cmd: podman push gitea.pena/penaside/adminfront:$(git rev-parse --abbrev-ref HEAD).$(git rev-parse HEAD)
|
||||||
|
|
@ -1,6 +1,10 @@
|
|||||||
const CracoAlias = require("craco-alias");
|
const CracoAlias = require("craco-alias");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
||||||
|
eslint: {
|
||||||
|
enable: false
|
||||||
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
{
|
{
|
||||||
plugin: CracoAlias,
|
plugin: CracoAlias,
|
||||||
|
@ -1,17 +1,9 @@
|
|||||||
version: "3.3"
|
|
||||||
services:
|
services:
|
||||||
admin_front:
|
admin_front:
|
||||||
container_name: admin_front
|
container_name: admin_front
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: $CI_REGISTRY_IMAGE/staging:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
|
image: gitea.pena/penaside/adminfront/staging:$GITHUB_RUN_NUMBER
|
||||||
networks:
|
|
||||||
- marketplace_penahub_frontend
|
|
||||||
- default
|
|
||||||
hostname: admin
|
|
||||||
ports:
|
ports:
|
||||||
- 10.8.0.7:80:80
|
- 10.7.0.18:80:80
|
||||||
- 10.8.0.7:443:443
|
- 10.7.0.18:443:443
|
||||||
tty: true
|
tty: true
|
||||||
networks:
|
|
||||||
marketplace_penahub_frontend:
|
|
||||||
external: true
|
|
||||||
|
26332
package-lock.json
generated
Normal file
26332
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@
|
|||||||
"@date-io/dayjs": "^2.15.0",
|
"@date-io/dayjs": "^2.15.0",
|
||||||
"@emotion/react": "^11.10.4",
|
"@emotion/react": "^11.10.4",
|
||||||
"@emotion/styled": "^11.10.4",
|
"@emotion/styled": "^11.10.4",
|
||||||
"@frontend/kitui": "^1.0.97",
|
"@frontend/kitui": "^1.0.108",
|
||||||
"@material-ui/pickers": "^3.3.10",
|
"@material-ui/pickers": "^3.3.10",
|
||||||
"@mui/icons-material": "^5.10.3",
|
"@mui/icons-material": "^5.10.3",
|
||||||
"@mui/material": "^5.10.5",
|
"@mui/material": "^5.10.5",
|
||||||
@ -50,8 +50,8 @@
|
|||||||
"zustand": "^4.3.8"
|
"zustand": "^4.3.8"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "craco start",
|
"start": "HOST=0.0.0.0 craco start",
|
||||||
"build": "NODE_OPTIONS=\"--max-old-space-size=1024\" craco build",
|
"build": "craco build",
|
||||||
"test": "craco test --env=node --transformIgnorePatterns \"node_modules/(?!@frontend)/\"",
|
"test": "craco test --env=node --transformIgnorePatterns \"node_modules/(?!@frontend)/\"",
|
||||||
"test:cart": "craco test src/utils/calcCart --transformIgnorePatterns \"node_modules/(?!@frontend)/\"",
|
"test:cart": "craco test src/utils/calcCart --transformIgnorePatterns \"node_modules/(?!@frontend)/\"",
|
||||||
"test:cypress": "start-server-and-test start http://localhost:3000 cypress",
|
"test:cypress": "start-server-and-test start http://localhost:3000 cypress",
|
||||||
@ -73,6 +73,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@babel/plugin-transform-private-property-in-object": "^7.23.4",
|
||||||
"@eslint/js": "^9.3.0",
|
"@eslint/js": "^9.3.0",
|
||||||
"craco-alias": "^3.0.1",
|
"craco-alias": "^3.0.1",
|
||||||
"eslint": "^9.3.0",
|
"eslint": "^9.3.0",
|
||||||
|
@ -6,10 +6,7 @@ import { parseAxiosError } from "@root/utils/parse-error";
|
|||||||
import { Privilege } from "@frontend/kitui";
|
import { Privilege } from "@frontend/kitui";
|
||||||
import type { TMockData } from "./roles";
|
import type { TMockData } from "./roles";
|
||||||
|
|
||||||
type SeverPrivilegesResponse = {
|
type SeverPrivilegesResponse = CustomPrivilege[];
|
||||||
templategen: CustomPrivilege[];
|
|
||||||
squiz: CustomPrivilege[];
|
|
||||||
};
|
|
||||||
|
|
||||||
const API_URL = `${process.env.REACT_APP_DOMAIN}/strator`;
|
const API_URL = `${process.env.REACT_APP_DOMAIN}/strator`;
|
||||||
|
|
||||||
@ -50,7 +47,7 @@ export const requestServicePrivileges = async (): Promise<[SeverPrivilegesRespon
|
|||||||
try {
|
try {
|
||||||
const privilegesResponse = await makeRequest<never, SeverPrivilegesResponse>({
|
const privilegesResponse = await makeRequest<never, SeverPrivilegesResponse>({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `${API_URL}/privilege/service`,
|
url: `${API_URL}/privilege`,
|
||||||
});
|
});
|
||||||
|
|
||||||
return [privilegesResponse];
|
return [privilegesResponse];
|
||||||
|
@ -81,7 +81,7 @@ export const requestTariffs = async (page: number): Promise<[GetTariffsResponse
|
|||||||
try {
|
try {
|
||||||
const tariffsResponse = await makeRequest<never, GetTariffsResponse>({
|
const tariffsResponse = await makeRequest<never, GetTariffsResponse>({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `${API_URL}/tariff/?page=${page}&limit=${100}`,
|
url: `${API_URL}/tariff/getlist/?page=${page}&limit=${100}`,
|
||||||
});
|
});
|
||||||
|
|
||||||
return [tariffsResponse];
|
return [tariffsResponse];
|
||||||
|
@ -26,6 +26,7 @@ export interface Ticket {
|
|||||||
title: string;
|
title: string;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
updated_at: string;
|
updated_at: string;
|
||||||
|
system?: boolean;
|
||||||
rate: number;
|
rate: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,10 +33,15 @@ export default function Support() {
|
|||||||
onFetchStateChange: setTicketsFetchState,
|
onFetchStateChange: setTicketsFetchState,
|
||||||
});
|
});
|
||||||
|
|
||||||
useSSESubscription<Ticket>({
|
useSSESubscription<Ticket | [{event: "ping"}]>({
|
||||||
enabled: Boolean(token),
|
enabled: Boolean(token),
|
||||||
url: process.env.REACT_APP_DOMAIN + `/heruvym/v1.0.0/subscribe?Authorization=${token}`,
|
url: process.env.REACT_APP_DOMAIN + `/heruvym/v1.0.0/subscribe?Authorization=${token}`,
|
||||||
onNewData: updateTickets,
|
onNewData: (e) => {
|
||||||
|
|
||||||
|
if ("event" in e[0] && e[0].event === "ping") return
|
||||||
|
|
||||||
|
updateTickets(e as Ticket[])
|
||||||
|
},
|
||||||
onDisconnect: () => {
|
onDisconnect: () => {
|
||||||
clearMessageState();
|
clearMessageState();
|
||||||
clearTickets();
|
clearTickets();
|
||||||
|
@ -22,12 +22,13 @@ export default function TicketItem({ ticket, setActiveUserId }: Props) {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const ticketId = useParams().ticketId;
|
const ticketId = useParams().ticketId;
|
||||||
|
|
||||||
const isUnread = ticket.user === ticket.top_message.user_id;
|
console.log(ticket)
|
||||||
|
const isUnread = ticket.user === ticket?.top_message?.user_id;
|
||||||
const isSelected = ticket.id === ticketId;
|
const isSelected = ticket.id === ticketId;
|
||||||
|
|
||||||
const unreadSx = {
|
const unreadSx = {
|
||||||
border: "1px solid",
|
border: "1px solid",
|
||||||
borderColor: theme.palette.golden.main,
|
borderColor: ticket.system ? "red" : theme.palette.golden.main,
|
||||||
backgroundColor: theme.palette.goldenMedium.main,
|
backgroundColor: theme.palette.goldenMedium.main,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ function sortTicketsByUpdateTime(ticket1: Ticket, ticket2: Ticket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function sortTicketsByUnread(ticket1: Ticket, ticket2: Ticket) {
|
function sortTicketsByUnread(ticket1: Ticket, ticket2: Ticket) {
|
||||||
const isUnread1 = ticket1.user === ticket1.top_message.user_id;
|
const isUnread1 = ticket1.user === ticket1?.top_message.user_id;
|
||||||
const isUnread2 = ticket2.user === ticket2.top_message.user_id;
|
const isUnread2 = ticket2.user === ticket2?.top_message.user_id;
|
||||||
return Number(isUnread2) - Number(isUnread1);
|
return Number(isUnread2) - Number(isUnread1);
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ export default function CreateTariff() {
|
|||||||
const [, createdTariffError] = await createTariff({
|
const [, createdTariffError] = await createTariff({
|
||||||
name: values.nameField,
|
name: values.nameField,
|
||||||
price: Number(values.customPriceField) * 100,
|
price: Number(values.customPriceField) * 100,
|
||||||
order: values.orderField,
|
order: Number(values.orderField),
|
||||||
isCustom: false,
|
isCustom: false,
|
||||||
description: values.descriptionField,
|
description: values.descriptionField,
|
||||||
privileges: [
|
privileges: [
|
||||||
|
@ -20,12 +20,5 @@ export const requestPrivileges = async () => {
|
|||||||
return console.error(privilegesError);
|
return console.error(privilegesError);
|
||||||
}
|
}
|
||||||
|
|
||||||
let allPrivileges: CustomPrivilege[] = [];
|
if (privilegesResponse) mutatePrivileges(privilegesResponse);
|
||||||
|
|
||||||
if (privilegesResponse) {
|
|
||||||
if (privilegesResponse.templategen !== undefined)
|
|
||||||
allPrivileges = allPrivileges.concat(privilegesResponse.templategen);
|
|
||||||
if (privilegesResponse.squiz !== undefined) allPrivileges = allPrivileges.concat(privilegesResponse.squiz);
|
|
||||||
mutatePrivileges(allPrivileges);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user