-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
create new tag #658
create new tag #658
Conversation
This pull request is being automatically deployed with Vercel (learn more). 🔍 Inspect: https://vercel.com/watchdogpolska/small-eod/dtn6rpgpx |
Uruchamiam przy pomocy docker-compose up, a jak powinienem ? |
Dobrze robisz. Ja poszedłem na skróty. Popracuje dalej nad odtworzeniem tego. |
Wygląda na to, że znalazłem winowajce tj. uwierzytelnianie sesją: https://www.django-rest-framework.org/api-guide/testing/#csrf |
@ad-m przerzuciłem się na chrome (wcześniej odpalałem z safari ) a tam na początku była ta sama dolegliwość. |
Świetnie! Daj znać, gdy pojawią się kolejne trudności. To, że miałem od Ciebie kod to byłoby znaczące przyspieszenie w analizie. Nie obawiaj się publikować kodu w toku, jeżeli się kompiluje (oczywiście, adekwatnie oznaczonego). Jak wejdzie #613 to takie rzeczy dotyczące klienta API będę mógł wspierać szybciej, bo bezpośrednio z przeglądarki. Ewentualnie – w zakresie UX – same biuro powie czy poprawka spełnia potrzeby. Docelowo powinniśmy wspierać zarówno Chrome i Firefox. |
Po ostatnim commit, dodanie nowego tagu działa poprawnie. Z lewej strony ekranu wysuwa się powiadomienie że zapis zakończony sukcesem i przenosi użytkownika na listę z tagami.
|
Łatwiej będzie wątkować dyskusje, jeżeli problemy będziemy. Tam jak napiszesz komentarz do kodu to mogę na niego odpowiedzieć i tworzą się subwątki, zamiast numerowania. 1/ Zobacz na https://github.com/watchdogpolska/small-eod-sdk-javascript/blob/f7a69184b467d3e1fc531328de48a650aeff9550/src/small_eod/TagsApi.js#L63-L67 i tu https://github.com/watchdogpolska/small-eod-sdk-javascript/blob/f7a69184b467d3e1fc531328de48a650aeff9550/src/ApiClient.js#L468-L494 . SDK zwraca Promise, która resolvuje się, w przypadku odpowiedzi 2xx, a throwuje gdy wystąpi błąd. Jeżeli używasz Przepisze to powiadomienia, aby to obsługiwać. Nie wiem czy koszernie z punktu Reacta, bo znam tylko JS. 2/ Nie mam pojęcia, nie znam Reacta, niestety. |
@ad-m Po Twoich zmianach, dodawanie nowego tagu wygląda już całkiem przyjemnie. Są przyjemne dla oka informacje o sukcesie oraz informacje o ewentualnym problemie. Odnośnie powiadomień, utworzyłem demoniczny issue #666. Na tą chwilę nie potrafię utworzyć takiego elementu. Gdybyś uznał, że wykonana w ramach tego PR praca jest w porządku i można to mergować to daj znać co zrobić dalej ? |
@daxter44 , status PR można zmieniać: https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/changing-the-stage-of-a-pull-request#marking-a-pull-request-as-ready-for-review Msz nawet nad polem komentarza przycisk "Ready for review" |
@mrbojko , w zagadnieniu przydatne byłoby osoby z doświadczeniem w React. |
To może dodaj mojego brata do reviewersów - login fervero, może sprawdzić koszerność reactową... |
Oznaczyć do review mogę tylko osoby dodane do repozytorium (co muszą zaakceptować) i osoby, które udzielały się w danym zagadnieniu. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to i przenieś z global do osobnego modelu tak jak mówiłem na callu
|
||
interface TagNewFormProps { | ||
name: String; | ||
name: string; | ||
dispatch: Function; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Function to bardzo ogólny interfejs, pasowałoby coś bardziej konkretnego
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Co proponujesz?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Redux (i react-redux) ma to już otypowane. Wydaje mi się, że można po prostu dać dispatch: Dispatch<AnyAction>
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kuskoman a w zasadzie jak nazwać ten nowy model ?
Notification ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
import { notification } from 'antd';
import { ReactNode } from 'react';
import { IconType } from 'antd/lib/notification';
export const openNotificationWithIcon = (message: IconType, description: ReactNode) => {
notification[message]({ message, description });
};
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@daxter44 spushuj to zobaczę
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
export interface GlobalModelState { | ||
collapsed: boolean; | ||
} | ||
|
||
export const openNotificationWithIcon = (type, msg) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Argumenty funkcji należy otypować
- Zamiast pisać
message: type, description: msg
, można odpowiednio nazwać argumenty i zmieścić się w
export const openNotificationWithIcon = (message: IconType, description: ReactNode) => {
notification[type]({ message, description });
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nie mogę znaleźć referencji do IconType, który sugerujesz. Nie widzę ani w React ani w Redux ani w Antd. Skąd ten twór ? Czy zostawić message: any
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@daxter44 tak celem usprawiedliwienia- nie było mnie 2 dni w domu, teraz dopiero docieram do notyfikacji
myślę, że chodzi o:
import { IconType } from 'antd/lib/notification';
router.replace(`/tags/`); | ||
} catch (err) { | ||
if (err.response.status === 400 && err.response.body.name) { | ||
err.response.body.name.forEach(message => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Czy możemy to zapisać generycznie, aby błędy w polach wyświetlały się przy polach formularzach, zamiast w powiadomieniu bez informacji jakiego pola dotyczy błąd?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ja nie widzę problemu, aby dopracować strukturę odpowiedzi błędu API, ale potrzebne wytyczne co do potrzeb.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ad-m W oknie logowania, mamy wyświetlanie problemu w formularzu (pomiedzy "Hasło logowania do konta" a polem z loginem ) I gdybym posiedział to jestem w stanie jeszcze to odwzorować.
Niestety nie wiem jak mogła by wyglądać struktura odpowiedzi z api aby przypisywać błąd do konkretnego pola w formularzu. Pozwolę sobie zawołać @kuskoman, czy jesteś w stanie coś tutaj zasugerować ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Obecna odpowiedź API wskazuje konkretne pole, bo masz name
. Ja proponuje starać się użyć obecnej odpowiedzi, a jak problem zostanie rozpracowany mocniej (więcej przypadków) to zmienimy strukturę API, aby uprościć implementacje w front-endzie. Wykonamy to przed wejściem z V2 na produkcje.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ad-m siedziałem trochę godzin nad zagadnieniem, próbowałem szukać pomocy na forach jednak nie udało mi się zrobić odpowiedzi według Twoich założeń. Dokładniej mam problem z przekazaniem odpowiedzi z Modelu do formularza, próbowałem odgapić to z elementu logowania bądź z Cases/New (ponieważ są tam zwracane kolekcje tagów/instytucji itd.) jednak nic z tego.
Odniosę się tutaj do reszty issue, chętnie się za nie wezmę gdy ktoś opracuje standard edycji/dodawania/usuwania ponieważ tak jak mówiłem na pierwszym call'u to moje początki z reactem i reduxem i dopiero poznaje mechanikę ich działania :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ja w zakresie Reacta nie mam zbytniego doświadczenia także, ale podglądając zamykając projekt w Vue, z którym mam zaproponowałem:
const handleSubmit = (value: Tag) => {
// dispatch({
// type: 'tags/create',
// payload: { ...value },
// });
const response = {
name: [`To pole jest wymagane ${Math.random()}.`]
};
form.setFields(Object
.entries(response)
.map(([name, errors]) => ({ name, errors }))
);
};
Teraz pozostaje tylko rozważenie gdzie ta logika obsługi błędów będzie się znajdować, czy w komponencie strony (jak teraz wkleiłem), czy w modelu (jak teraz jest), czy w serwisie (jak mogłoby teoretycznie być), a następnie odpowiednie przekazanie danych. Proszę o komentarz @fervero i @mateuszmagulski , którzy mają większe doświadczenie w projekcie.
Jeżeli będziemy mieli ten element poprawnie rozwiązany to możemy znacznie więcej walidacji pchnąć na back-end (na początku nawet nie musimy tracić czasu na komunikat dla wymaganego pola, bo back-end to sprawdzi). W zespole obecnie nie widzę osoby, która po prostu może wyznaczyć standard, więc raczej nie unikniemy tego.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ale mój kod nie odnosi się wyłącznie do wymaganego pola :) Kod może przetwarzać także pozostałe błędy z back-endu (nieprawidłowy format, złą długość itd.). Poza tym jest gwarantowane, że będzie to spójne z back-endem. Akurat tym razem przypadek nam się powtórzył, ale patrz szerzej jako na standard.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tylko wąski zakres błędów jesteś w stanie sprawdzić po stronie front-endu.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@daxter44 is attempting to deploy a commit to the Watchdog Polska Team on Vercel. A member of the Team first needs to authorize it. |
Deployment failed with the following error:
|
#630 Wybrałem na początek Tag, bo nie ma zagnieżdżonych elementów.
Nie jest jeszcze obsłużony moment gdy dostanę odpowiedź 200 : Ok, na razie do momentu wysłania request'a do api.
Payload:
error: