naprawa przypisania menedżerów liniowych + możliwość wyboru menedżera#51
Conversation
… przez admina podczas tworzenia konta pracownika
| AdminAssignableRole role | ||
| AdminAssignableRole role, | ||
|
|
||
| UUID supervisorId |
There was a problem hiding this comment.
tutaj reguła walidacji by się przydała, tak jak wyżej
| public ResponseEntity<List<SimpleUserResponse>> searchUsers(@RequestParam("search") String search) { | ||
| public ResponseEntity<List<SimpleUserResponse>> searchUsers( | ||
| @RequestParam("search") String search, | ||
| @RequestParam(required = false) UserRole userRole |
There was a problem hiding this comment.
nie możemy korzystać tutaj z typu UserRole bo to jest typ bazodanowy z naszej encji użytkownika, najlepiej jakbyś dodał nowy typ w stylu UserSearchableRole i tam skopiował te wartości w stylu LINEAR, COMMON etc po prostu wszystko co uważasz za zasadne do wyszukiwania. Na którymś późniejszym etapie należy zrobić po prostu mapowanie tego na UserRole
| }, | ||
|
|
||
| searchUsers: async (searchTerm: string): Promise<SimpleUserResponse[]> => { | ||
| searchUsers: async (searchTerm: string, userRole?: string): Promise<SimpleUserResponse[]> => { |
There was a problem hiding this comment.
tutaj na pewno typ danych się nie zgadza, userRole nie może być stringiem, trzeba utworzyć jakiś nowy typ zgodny zapewne z moim wcześniejszym komentarzem, tzn UserSearchableRole
| export const useSearchLinearManagers = (searchTerm: string) => { | ||
| return useQuery({ | ||
| queryKey: usersKeys.search(`LINEAR_MANAGER:${searchTerm}`).queryKey, | ||
| queryFn: () => userManagementService.searchUsers(searchTerm, 'LINEAR_MANAGER'), |
There was a problem hiding this comment.
'LINEAR_MANAGER' to jest zhardcodowane, trzeba się tego pozbyć
| }; | ||
|
|
||
| const onSubmit = handleSubmit((data) => { | ||
| if (data.role === 'COMMON' && !data.supervisorId) { |
There was a problem hiding this comment.
'COMMON' to ma znowu związek z brakiem odpowiedniego typu danych
| watchedRole, | ||
| onManagerSelect, | ||
| managerError, | ||
| }: InviteUserModalViewProps) => ( |
There was a problem hiding this comment.
tutaj się pojawia zbyt dużo propsów, skorzystaj z useFormContext, żeby pozbyć się przekazywania tego. Najlepiej jakbyś w ogóle skorzystał z tego co dostarcza ta biblioteka tzn FormProvider bo tam jest wbudowana obsługa błędów itp. bardzo dużo rzeczy których nie trzeba samemu pisać np. mozna uniknąć tego:
const [managerError, setManagerError] = useState<string | undefined>();
| {errors.role && <span className="text-red-500 text-xs">{errors.role.message}</span>} | ||
| </div> | ||
|
|
||
| {watchedRole === 'COMMON' && ( |
There was a problem hiding this comment.
'COMMON' do zmiany na AdminAssignableRole.COMMON
rrogalski
left a comment
There was a problem hiding this comment.
jedna rzecz razi w oczy, poza tym wygląda w porządku
| ) { | ||
| if (userRole != null) { | ||
| return ResponseEntity.ok(userService.searchUsersByRole(search, userRole)); | ||
| return ResponseEntity.ok(userService.searchUsersByRole(search, UserRole.valueOf(userRole.name()))); |
There was a problem hiding this comment.
UserRole.valueOf(userRole.name()) to jest bardzo chamskie rozwiązanie bo zadziała na podstawie porównywania stringów czyli zmapuje poprawnie tylko jeśli tekst będzie się zgadzać, lepiej do takich rzeczy robić switcha
switch(userRole):
COMMON -> UserRole.COMMON
There was a problem hiding this comment.
dobra sory, zaraz poprawie
na szybko troche ale działa, w bazie się dobrze zapisuje, jak coś jest nie tak to się poprawi