987 | | |
988 | | ---- |
| 984 | ---- |
| 985 | За правилно справување со формуларот за додавање рути и попатни точки, имплементиравме специјална верзија од претходно опишаниот useFormData Hook. |
| 986 | {{{#!javascript |
| 987 | const useFormNested = (editData) => { |
| 988 | const [formData, setData] = useState({...editData}); |
| 989 | |
| 990 | const onFormChange = (e) => { |
| 991 | console.log(e) |
| 992 | |
| 993 | const dependantRoutes = e.target.name === 'freeSpace' ? e.target.parentElement.getAttribute('dependantRoutes').split(',') : undefined; |
| 994 | console.log(dependantRoutes) |
| 995 | |
| 996 | let updatedData = { |
| 997 | ...formData, |
| 998 | [e.target.parentElement.attributes.routeId.value]: { |
| 999 | ...formData[e.target.parentElement.attributes.routeId.value], |
| 1000 | [e.target.name]: e.target.value |
| 1001 | }, |
| 1002 | } |
| 1003 | |
| 1004 | if (e.target.name === 'freeSpace') |
| 1005 | dependantRoutes.forEach(x => { |
| 1006 | updatedData = { |
| 1007 | ...updatedData, |
| 1008 | [x]: { |
| 1009 | ...formData[x], |
| 1010 | [e.target.name]: e.target.value |
| 1011 | }, |
| 1012 | } |
| 1013 | }) |
| 1014 | setData(updatedData); |
| 1015 | console.log(updatedData) |
| 1016 | }; |
| 1017 | |
| 1018 | const setFormData = (newData) => { |
| 1019 | setData({...newData}); |
| 1020 | } |
| 1021 | return { |
| 1022 | formData, |
| 1023 | onFormChange, |
| 1024 | setFormData |
| 1025 | }; |
| 1026 | }; |
| 1027 | |
| 1028 | export default useFormNested; |
| 1029 | }}} |
| 1030 | Оваа функција овозможува при промена во поле кај една рута, одеднаш да се ажурираат сите рути кои директно зависат од неа. На овој начин се обезбедува конзиистентност во бројот на слободни места за секоја од под-рутите. По завршениот внес, се испраќа POST барање кое го пречекува контролерот: |
| 1031 | {{{#!java |
| 1032 | @PostMapping(path = "/transport/available/add") |
| 1033 | public void add(@RequestBody TransportAvailible transportAvailable, @RequestParam(name = "transportId") long transportId) { |
| 1034 | |
| 1035 | transportManager.createTransportAvailable(transportAvailable, transportAvailable.getTransport(), transportAvailable.getFrom(), transportAvailable.getTo(), transportAvailable.getDate(), transportAvailable.getFreeSpace(), transportAvailable.getTime(), transportId, transportAvailable.getRoutes()); |
| 1036 | } |
| 1037 | |
| 1038 | }}} |
| 1039 | А потоа се предава на сервисот каде се формира главната (родител) рутa, се зачувува и потоа се формираат пооделните рути каде иста е назначена и се зачувуваат. |
| 1040 | {{{#!java |
| 1041 | @Override |
| 1042 | public void createTransportAvailable(TransportAvailible transportAvailible, Transport transport, String departureLocation, String arrivalLocation, Date date, Integer noSeats, Date departureHour, Long transportId, Collection<TransportRoute> trRoutes) { |
| 1043 | Transport t = getTransportById(transportId); |
| 1044 | List<TransportRoute> routes = trRoutes.stream().toList(); |
| 1045 | routes.get(0).setDeparture(transportAvailible.getDate()); |
| 1046 | transportAvailible.setTime(routes.get(routes.size() - 1).getArrival()); |
| 1047 | routes.forEach(x -> x.setParentRoute(transportAvailible)); |
| 1048 | transportAvailible.setTransport(t); |
| 1049 | TransportAvailible ta=new TransportAvailible(t,departureLocation,arrivalLocation,date,noSeats,departureHour); |
| 1050 | transportDao.createTransportAvailable(ta); |
| 1051 | routes.forEach(x -> { |
| 1052 | TransportRoute tr = new TransportRoute(ta, x.getFrom(), x.getTo(), x.getPrice(), x.getDeparture(), x.getArrival(), x.getFreeSpace(), x.getOrder()); |
| 1053 | transportDao.createTransportRoute(tr); |
| 1054 | }); |
| 1055 | } |
| 1056 | }}} |
| 1057 | |
| 1058 | {{{#!java |
| 1059 | |
| 1060 | }}} |
| 1061 | |
| 1062 | {{{#!java |
| 1063 | @Override |
| 1064 | @Transactional |
| 1065 | public void createTransportAvailable(TransportAvailible ta) { |
| 1066 | em.persist(ta); |
| 1067 | |
| 1068 | } |
| 1069 | }}} |
| 1070 | // |
| 1071 | {{{#!java |
| 1072 | @Override |
| 1073 | @Transactional |
| 1074 | public void createTransportRoute(TransportRoute tr) { |
| 1075 | em.persist(tr); |
| 1076 | } |
| 1077 | }}} |
| 1078 | |
| 1079 | ==== Менаџира резервации |