Skip to content

Commit

Permalink
Merge pull request #64 from 4lysson-a/dev
Browse files Browse the repository at this point in the history
  • Loading branch information
4lysson-a authored Sep 21, 2024
2 parents ade1d30 + ee82d1f commit 95836b2
Show file tree
Hide file tree
Showing 18 changed files with 261 additions and 62 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.data
.idea
data
2 changes: 1 addition & 1 deletion backend/.parse.local
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
"applicationId": ""
}
}
}
}
Binary file added backend/bun.lockb
Binary file not shown.
4 changes: 2 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ services:

mongodb:
image: mongo:latest
container_name: mongodb
container_name: tonaweb-mongodb
environment:
- MONGO_INITDB_DATABASE=example
- MONGO_INITDB_DATABASE=tonaweb-db
ports:
- '27017-27019:27017-27019'
volumes:
Expand Down
49 changes: 24 additions & 25 deletions frontend/src/components/layout/(private)/CompanyProvider/index.jsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,34 @@
import React from 'react';
import Loading from '@/components/shared/Loading';
import React from "react";
import Loading from "@/components/shared/Loading";

export default function CompanyProvider({ children }) {
const isFirstTime = React.useRef(true);
const isFirstTime = React.useRef(true);

const [overlook, setOverlook] = React.useState(false);
const [overlook, setOverlook] = React.useState(false);

React.useEffect(() => {
if (isFirstTime.current) {
isFirstTime.current = false;
React.useEffect(async() => {
if (isFirstTime.current) {
isFirstTime.current = false;

async function getData() {
try {
const res = [];
async function getData() {
try {
const res = [];

if (res) {
setOverlook(true);
}
} catch (err) {
console.log(err);
}
}
if (res) {
setOverlook(true);
}
} catch (err) {
console.log(err);
}
}

getData();
return;
}
}, []);
await getData();
}
}, []);

if (overlook) {
return children;
}
if (overlook) {
return children;
}

return <Loading />;
return <Loading />;
}
5 changes: 4 additions & 1 deletion frontend/src/components/shared/Modals/NativeModal/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ const NativeModal = ({ children, onClose, isOpen }) => {

return (
<>
<div style={{ zIndex: MODAL_Z_INDEX }} className={sty.modal}>{children}</div>
<div style={{ zIndex: MODAL_Z_INDEX }} className={`relative ${sty.modal}`}>
<button onClick={onClose} className="absolute top-5 right-5 transition-all active:scale-90 bg-card text-texts w-6 flex items-center justify-center rounded-full">X</button>
{children}
</div>
<div
onClick={onClose}
className={sty.backdrop}
Expand Down
17 changes: 9 additions & 8 deletions frontend/src/hooks/useValidateNewVersion.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,29 @@ export default function useValidateNewVersion() {
const version = LocalStorage.get("version");
const today = new Date().toISOString().split("T")[0];

if (version?.exp === today) {
return;
}
if (version?.exp === today) return;

React.useEffect(() => {
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error(`Erro ao obter a última release: ${response.status} ${response.statusText}`);
}

return response.json();
})
.then(data => {
const currentVersion = LocalStorage.get("version");
if (currentVersion === data.tag_name) return;

const tag = data.tag_name;
LocalStorage.set("version", {
tag,
exp: today
});
window.location.href = "/blog";

if (version.tag === tag) {
return;
} else {
LocalStorage.set("version", { tag, exp: today });
window.location.href = "/blog";
}
})
.catch(error => {
console.error("Erro:", error);
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/pages/Blog/Blog.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React from "react";

import Post3 from "./posts/v0.3.9.mdx";
import Post2 from "./posts/v0.3.6.mdx";
import Post1 from "./posts/v0.3.0.mdx";

Expand Down Expand Up @@ -34,6 +35,7 @@ export default function Blog() {
return (
<div className="h-full">
<MarkDownDefaultStyle>
<Post3 />
<Post2 />
<Post1 />
</MarkDownDefaultStyle>
Expand Down
26 changes: 26 additions & 0 deletions frontend/src/pages/Blog/posts/v0.3.9.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Video, Link, Frame, Badge, Title } from "@/pages/Blog/common";

<Badge text="Notas da versão v0.3.9" />

<div align="center">

![image](https://github.com/user-attachments/assets/da7d8698-b012-44f6-ac40-dcd69dfcc520)

</div>

<br />

Agora, você pode configurar a mensagem que seu cliente verá ao te enviar o pedido via whatsapp!

Configure o nome, preço e descrição do item, e o cliente verá essa mensagem ao te enviar o pedido via whatsapp.

## O que há de novo?

- **Correção de bugs e melhorias**: Corrigimos alguns bugs que atrapalhavam a experiência do usuário.
- **Adicionamos botões de voltar e fechar em alguns modais**: Agora, você pode fechar e voltar com mais facilidade.
- **Atualização de dependências**: Atualizamos as dependências do projeto para garantir a segurança e a estabilidade do sistema.
- **Configure a mensagem do seu cliente**: Agora, você pode configurar a mensagem que seu cliente verá ao te enviar o pedido via whatsapp!


<br />
<br />
2 changes: 1 addition & 1 deletion frontend/src/pages/Dash/Clip/Category/index.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from "react";
import ManageCategories from "./ManageCategories";

export default function Category() {
export default function Categories() {
return (
<div className="flex flex-col gap-5 relative">
<div className="flex flex-col gap-3">
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/pages/Dash/Clip/Phone/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ function PhoneForm({ setIsEditing }) {
setIsEditing(false);
} catch (error) {
console.error("Erro ao atualizar o número de telefone:", error);
} finally {
singleCompany.set("phone", phone);
}
};

Expand Down
155 changes: 155 additions & 0 deletions frontend/src/pages/Dash/Clip/UserForm/index.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import React from "react";

import { NativeModal } from "@/components/shared/Modals";
import Separator from "@/components/shared/Separator";
import useAuth from "@/hooks/zustand/(private)/useAuth";
import SimpleCircularLoading from "@/components/shared/Loading/SimpleCircularLoading";

export default function UserForm() {
const input = React.useRef();

const [companys] = useAuth(s => [s.companys]);

const [open, setOpen] = React.useState(false);
const [edit, setEdit] = React.useState(false);
const [loading, setLoading] = React.useState(false);

const savedMsg = companys[0].get("message");
const [message, setMessage] = React.useState(savedMsg);

const handleClick = type => {
switch (type) {
case "open":
setOpen(true);
break;
case "close":
setOpen(false);
break;
default:
setOpen(!open);
}
};

const handleChangeMessage = message => {
companys[0].set("message", message);
companys[0].save();
};

const handleSave = () => {
try {
setLoading(true);
handleChangeMessage(input.current.value);
setMessage(input.current.value);
} finally {
setTimeout(() => {
setLoading(false);
setEdit(false);
setOpen(false);
}, 1000);
}
};

const highlightPlaceholders = text => {
const placeholders = ["{nome}", "{valor}", "{produtos}"];
const parts = text.split(new RegExp(`(${placeholders.join("|")})`, "g"));
return parts.map((part, index) =>
placeholders.includes(part) ? (
<span key={index} style={{ color: "var(--primary)", fontWeight: "bold" }}>
{part}
</span>
) : (
part
)
);
};

return (
<div className="flex flex-col gap-5 relative">
<div className="flex flex-col gap-3">
<h2 className="text-2xl">Formulário dos usuários</h2>
<p className="text-[var(--texts)]">
Configure como os usuários vão te chamar no whatsapp customizando a mensagem.
</p>
</div>

<button
onClick={() => handleClick("open")}
className="p-3 relative bg-[var(--card)] rounded-xl font-bold text-[var(--texts)] transition duration-200 text-center active:scale-95"
>
Customizar mensagem
</button>

{open && (
<NativeModal key="user_form" onClose={() => handleClick("close")} isOpen={open}>
<div className="flex flex-col gap-4">
<div className="flex flex-col gap-10">
<div className="flex flex-col gap-4">
<h1 className="text-2xl mt-[-60px]">Gerenciar mensagem</h1>
<p className="text-xl">
Personalize a mensagem que será enviada para os usuários, você pode usar as tags{" "}
<span className="text-primary">{"{nome}"}</span>,{" "}
<span className="text-primary">{"{valor}"}</span> e{" "}
<span className="text-primary">{"{produtos}"}</span> para inserir o nome do usuário,
valor e produtos.
</p>
<p className="text-sm">
é importante que você mantenha as tags{" "}
<span className="text-primary">{"{nome}"}</span>,{" "}
<span className="text-primary">{"{valor}"}</span> e{" "}
<span className="text-primary">{"{produtos}"}</span> na mensagem para que o nome do
usuário, valor e produtos sejam inseridos corretamente.
</p>
</div>
</div>

<Separator />

<div className="flex flex-col gap-2">
<p>Mensagem atual</p>
{edit ? (
<textarea
ref={input}
cols="30"
rows="10"
placeholder={message}
className="bg-card rounded-xl text-texts p-6 text-xl"
></textarea>
) : (
<div
style={{
whiteSpace: "pre-wrap"
}}
className="bg-card rounded-xl text-texts p-6 text-xl"
>
{highlightPlaceholders(message)}
</div>
)}
</div>

<div className="flex w-full items-center gap-4 pt-6 justify-between">
<button
disabled={loading}
onClick={handleSave}
className="bg-primary disabled:opacity-50 flex items-center justify-center gap-2 font-bold text-card p-4 w-full px-6 rounded-xl"
>
{loading && (
<div className="w-4 flex">
<SimpleCircularLoading />
</div>
)}
Salvar
</button>
<button
disabled={loading}
onClick={() => setEdit(!edit)}
className="bg-transparent disabled:opacity-50 border text-primary font-bold border-primary p-4 w-full px-6 rounded-xl"
>
{edit ? "Cancelar" : "Editar"}
</button>
</div>
</div>
</NativeModal>
)}
</div>
);
}
15 changes: 8 additions & 7 deletions frontend/src/pages/Dash/Clip/index.jsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
import React from "react";

import PageTemplate from "@/pages/Dash/lib/PageTemplate";

import LinkMenu from "@/pages/Dash/Clip/LinkMenu";
import QrCode from "@/pages/Dash/Clip/QrCode";

import LinkMenu from "@/pages/Dash/Clip/LinkMenu";
import Phone from "@/pages/Dash/Clip/Phone/index.jsx";
import Separator from "@/components/shared/Separator";
import DownloadMenu from "./DownloadMenu";
import Category from "./Category";
import Phone from "./Phone";
import PageTemplate from "@/pages/Dash/lib/PageTemplate";
import Category from "@/pages/Dash/Clip/Category/index.jsx";
import UserForm from "@/pages/Dash/Clip/UserForm/index.jsx";
import DownloadMenu from "@/pages/Dash/Clip/DownloadMenu/index.jsx";

export default function Clip() {
return (
<PageTemplate title={{ text: "Gerenciar", highlight: "Opções" }}>
<Phone />
<Separator />
<UserForm />
<Separator />
<Category />
<Separator />
<LinkMenu />
Expand Down
Loading

0 comments on commit 95836b2

Please sign in to comment.