Merge branch 'staging'
Some checks failed
Deploy / CreateImage (push) Failing after 34s
Deploy / DeployService (push) Has been skipped

This commit is contained in:
Nastya 2025-06-17 20:36:57 +03:00
commit 935af033a6
16 changed files with 26425 additions and 36 deletions

@ -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

@ -0,0 +1 @@
"@frontend:registry" "http://gitea.pena/api/packages/skeris/npm/"

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

@ -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

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: [

@ -19,13 +19,6 @@ export const requestPrivileges = async () => {
if (privilegesError) { if (privilegesError) {
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);
}
}; };