hasadna / open-bus-map-search Goto Github PK
View Code? Open in Web Editor NEWopen-bus-map-search
Home Page: https://open-bus-map-search.hasadna.org.il/dashboard
License: MIT License
open-bus-map-search
Home Page: https://open-bus-map-search.hasadna.org.il/dashboard
License: MIT License
When we in mobile display of media screen less than 600px approximately and try to open the menu, it appears near the content screen and the sum of the menu width and content width is more than the actual screen so the screen slides. Better to make the menu appear above the content screen in those screen sizes.
Suggested filters:
מסוף קסטינה <> דרך ירושלים, תל אביב
). This can be achieved by identifying the location of the first and the last stop using GIS.In some pages like GapsPage and TimelinePage, I think it will be a better user experience to add a reset button. When the user would like to change the selected bus number he/she will click this button and the inputs will be removed/change to the default input. What do you think about this? @ShayAdler @NoamGaash
Mui Grid v2 is still in development and it is unstable.
Since the new implementation is considered a breaking change, we introduced it as Unstable_Grid2 to gather feedbacks from the community before making it stable in the next major release of Material UI.
https://mui.com/material-ui/react-grid2/
There is an issue in the site that related to Grid v2
For now, I think it is better to use a stable version. What do you think?
when visiting pages in the application, such as the "About" page, our routing component redirects requests such as:
https://open-bus-map-search.hasadna.org.il/about
to ugly URLs such as:
https://open-bus-map-search.hasadna.org.il/about?operatorId=&lineNumber=&routeKey=×tamp=1696154828313
DOD:
Good luck!
🎈
wdyt?
@NoamGaash
#hacktoberfest
Currently, mainly in the aggregation widgets, there's no way to know if the percentage you see is based on a complete data. Bugs I saw so far can due to -
Anyway, users should take this into account before exporting statistics.
A first step can be something like this, basically by counting the amount of siri data we have globally for this dat + the amount that was matched to gtfs:
More complex solutions can be:
Our users doesn't understand the data shown on different pages.
We will need some text contributions describing what's going on.
The text will need approval - we have volunteers with legal understanding, but it could take more time than other contribution. Yet, this contribution is vital.
ways to contribute -
<section>
tag or inside a <Tooltip>
componentthank you all!
It might be a good idea to also support English language in this app.
I am thinking of using this library to achieve the same - https://www.npmjs.com/package/react-localization
Right now, we simply dump the data that we have here.
It is ugly.
Let's make it human-readable, and show the speed, direction, and other details about this bus in a creative way.
Think open new issues.
PR #54 destroy the layout.
And the place need to be here:
Originally posted by @aviv1620 in #80 (comment)
We should fix the layouts of DashboardPage and GapsPatternsPage
The same operators that were removed from the "by operator" widget should be hidden here as well -
The page simply ignore them.
command at package.json scripts section should be
unit tests command: test
e2e(playwright) tests command: e2e:dev
(dev because of --ui
option)
should the filter change all the views?
maybe consider updating the filter on click on operator.
and why does the operator selection contains only 5?
@NoamGaash
#hacktoberfest
Use case: Identifying of lack of execution by hour patterns
Example:
If we group by the execution metrics of line 64 of Electra Afikim from 1.7-30.7 by hour, we can easily identify patterns (take a look at 9:30):
Suggestion:
In stride-api, timestamps are returned in utc 0 . Some of the pages in the UI convert it and some are not.
The ones I found (buy please go over the pages are verify me :) ):
on the patterns page, when you choose a new bus route it takes about 4 seconds to fetch and show the data.
right now there is no indicator that the data is being fetched, i'd suggest adding some sort of spinner or loading indicator.
i can take this issue if needed :)
Add the following data to the main screen (links for inspiration) -
The suggestion is to count of the SIRI samples near stops (mainly for interstate lines).
We should discuss in depth such logic, as it is not trivial and can have false positives.
The colorIcon
function is defined in two files (RealTimeMapPage
and BusLayer
) and have the same functionality and style.
Do you want to keep it as is or to move it to a separate file?
Is it a good idea to make a feature that marks dates with exceptional events?
For example, if we look in 'gaps' when there is war and the bus can be gapped because of 'Red color alarm'.
Another example we look in 'gaps' when there is a demonstration and the bus can be gapped because the roads are blocked.
יהיה נחמד אם במסך של תחקור נסיעה ספציפית, יהיה אפשר אוטומטית לייצר טופס תלונה למשרד התחבורה (ואולי גם להגיש את טופס התלונה באופן אוטומטי).
בגדול, טפסי תלונה זה דבר שאפשר לייצא \ לייבא בפורמט XML, אז לייצר את הקובץ בשביל שמשתמשים יוכלו להוריד אותו ולהגיש אותו זאת התחלה מצויינת.
דברים שאנחנו יכולים לייצר אוטומטית:
דוגמה לXML:
<?xml version="1.0" encoding="utf-8"?><root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" formId="[email protected]" formVersion="3.0.2" formCompileTime="13/08/2023" xmlns="http://AGForms/[email protected]"><form><UserUImode>AGFrom2Html</UserUImode><BTSFormID xsi:nil="true"></BTSFormID><BTSFormDesc xsi:nil="true"></BTSFormDesc><BTSProcessID xsi:nil="true"></BTSProcessID><ReferenceNumber>1094302</ReferenceNumber><StageStatus>UserToOffice</StageStatus><dataModelSaver>{ "contactType": { "selectContactType": "1", "isChosenType": true }, "personalDetails": { "firstName": "עגכע", "lastName": "תצתץ", "iDNum": "123456789", "mobile": "050-1234567", "phone": "", "contactOptions": "1", "fax": "", "email": "[email protected]", "city": { "dataCode": 8600, "dataText": "רמת גן" }, "street": "רחוב", "houseNumber": "1234", "appartment": "", "postBox": "", "zipCode": "", "name": "personalDetails", "state": "completed", "next": "", "prev": "", "isClosed": true }, "requestSubject": { "applySubject": { "dataCode": "0", "dataText": "אוטובוס" }, "applyType": { "dataCode": "2", "dataText": "אי ביצוע נסיעה" }, "name": "requestSubject", "state": "completed", "next": "", "prev": "", "isClosed": true }, "requestDetails": { "taxi": { "taxiType": "2" }, "busAndOther": { "ravKav": true, "ravKavNumber": "", "reportdate": "", "reportTime": "", "addingFrequencyReason": [], "operator": { "dataCode": 3, "dataText": "אגד" }, "addOrRemoveStation": "2", "driverName": "", "licenseNum": "", "eventDate": "11/12/2022", "eventHour": "12:34", "fromHour": "12:34", "toHour": "12:40", "fillByMakatOrAddress": "2", "makatStation": "", "lineNumberText": "1", "lineNumberFromList": { "dataText": "" }, "direction": { "dataCode": 3, "dataText": "זכרון יעקב-זכרון יעקב" }, "raisingStation": { "dataCode": 47340, "dataText": "גאולים/כנפי נשרים" }, "applyContent": "תוכן הפנייה", "busDirectionFrom": "מוצא", "busDirectionTo": "יעד", "raisingStationCity": { "dataText": "" }, "destinationStationCity": { "dataText": "" }, "raisingStationAddress": "", "cityId": "", "cityName": "", "originCityCode": "", "originCityName": "", "destinationCityCode": "", "destinationCityText": "", "directionCode": "", "stationName": "", "lineCode": "" }, "train": { "trainType": "1", "eventDate": "", "eventHour": "", "startStation": { "dataText": "" }, "destinationStation": { "dataText": "" }, "number": "", "applyContent": "" }, "requestSubjectCode": "", "requestTypeCode": "", "title": "", "name": "requestDetails", "state": "completed", "next": "", "prev": "", "isClosed": true }, "documentAttachment": { "documentsList": [ { "attacmentName": "" } ], "name": "documentAttachment", "state": "notValidated", "next": "", "prev": "", "isClosed": false }, "followStatus": { "contactIdList": [ { "ticketNumber": "" } ], "contactIdResultList": [], "name": "followStatus", "state": "notValidated", "next": "", "prev": "", "isClosed": true }, "containersViewModel": { "showPrintButton": true, "isTabsMode": true, "validatedStatus": true }, "formInformation": { "referenceNumber": "1094302", "stageStatus": "UserToOffice", "loadingDate": "03/09/2023", "firstLoadingDate": "", "isMobile": false, "language": "hebrew" }}</dataModelSaver><isMobile>false</isMobile><DeviceType xsi:nil="true"></DeviceType><FirstLoadingDate xsi:nil="true"></FirstLoadingDate><Date>03/09/2023</Date><SelectContactType>1</SelectContactType><FirstName>עגכע</FirstName><LastName>תצתץ</LastName><IDNum>123456789</IDNum><Mobile>050-1234567</Mobile><Phone xsi:nil="true"></Phone><ContactDetails>1</ContactDetails><Email>[email protected]</Email><fax xsi:nil="true"></fax><Settlement text="רמת גן">8600</Settlement><street>רחוב</street><HouseNumber>1234</HouseNumber><Appartment xsi:nil="true"></Appartment><POB xsi:nil="true"></POB><ZipCode xsi:nil="true"></ZipCode><ApplySubject text="אוטובוס">0</ApplySubject><TypeReq text="אי ביצוע נסיעה">2</TypeReq><TrainType>1</TrainType><EventDate2 xsi:nil="true"></EventDate2><EventHour2 xsi:nil="true"></EventHour2><StartStation text="" xsi:nil="true"></StartStation><DestStation text="" xsi:nil="true"></DestStation><TrainNumber xsi:nil="true"></TrainNumber><ApplyContent3 xsi:nil="true"></ApplyContent3><FirstDeclaration>false</FirstDeclaration><SecondDeclaration>false</SecondDeclaration><EventDetails xsi:nil="true"></EventDetails><Invoice xsi:nil="true"></Invoice><Evidence xsi:nil="true"></Evidence><OtherFactors xsi:nil="true"></OtherFactors><ETaxiType>2</ETaxiType><DrivingLicense2 xsi:nil="true"></DrivingLicense2><TaxiCap xsi:nil="true"></TaxiCap><TaxiDriverName xsi:nil="true"></TaxiDriverName><TaxiEventDate xsi:nil="true"></TaxiEventDate><TaxiEventHour xsi:nil="true"></TaxiEventHour><TaxiEventLocation xsi:nil="true"></TaxiEventLocation><ApplyContent xsi:nil="true"></ApplyContent><FinanceRavKav>true</FinanceRavKav><FinanceRavKavNumber xsi:nil="true"></FinanceRavKavNumber><FinanceOther>false</FinanceOther><SingleTrip>false</SingleTrip><LoadTopics>false</LoadTopics><LongWaiting>false</LongWaiting><ExtensionHours>false</ExtensionHours><Operator text="אגד">3</Operator><BusDriverName xsi:nil="true"></BusDriverName><BusLicenseNum xsi:nil="true"></BusLicenseNum><BusEventDate>11/12/2022</BusEventDate><BusEventHour>12:34</BusEventHour><from>12:34</from><by>12:40</by><Reportdate xsi:nil="true"></Reportdate><ReportTime xsi:nil="true"></ReportTime><Stationupdate>2</Stationupdate><NumStation>2</NumStation><LineNumberBoarding>1</LineNumberBoarding><Direction text="זכרון יעקב-זכרון יעקב">3</Direction><BusStationBoard text="גאולים/כנפי נשרים">47340</BusStationBoard><BoardingSettlement text="" xsi:nil="true"></BoardingSettlement><DropStaionAppeal text="" xsi:nil="true"></DropStaionAppeal><Risestationaddress xsi:nil="true"></Risestationaddress><MakatStation xsi:nil="true"></MakatStation><LineNumber text="" xsi:nil="true"></LineNumber><BusDirectionFrom>מוצא</BusDirectionFrom><BusDirectionTo>יעד</BusDirectionTo><Testimony>false</Testimony><Courttestimony>false</Courttestimony><CaseEssence>תוכן הפנייה</CaseEssence><OriginCityCode xsi:nil="true"></OriginCityCode><OriginCityName xsi:nil="true"></OriginCityName><LineCode xsi:nil="true"></LineCode><CityId xsi:nil="true"></CityId><CityName xsi:nil="true"></CityName><StationName xsi:nil="true"></StationName><DirectionCode xsi:nil="true"></DirectionCode><DestinationCityCode xsi:nil="true"></DestinationCityCode><DestinationCityText xsi:nil="true"></DestinationCityText><Title xsi:nil="true"></Title><RequestSubjectCode xsi:nil="true"></RequestSubjectCode><RequestTypeCode xsi:nil="true"></RequestTypeCode><Attacment_Doc><AttachDocument fileName="" /></Attacment_Doc><ContactID><ticketNumber xsi:nil="true"></ticketNumber></ContactID><contactIdResult><ticketNumber xsi:nil="true"></ticketNumber><dateReceived xsi:nil="true"></dateReceived><contactName xsi:nil="true"></contactName><incidentStatus xsi:nil="true"></incidentStatus></contactIdResult></form></root>
yarn
will make changes to the yarn.lock
, CI should failpackage-lock.json
file in the root folder, CI should failyarn run build
created things outside the .gitignore
, CI should failfor example:
https://github.com/microsoft/playwright/actions/runs/6464306848/job/17548743565?pr=27519
currently until data loaded, the chart space appears white
it is better to add a loading indicator
im thinking skeleton
animation could be fine (im not designer, so if this design looks wrong to you please comment here)
the new look of page, with skeleton
animations
https://github.com/hasadna/open-bus-map-search/assets/1336862/f165b51b-b1fc-4250-9158-1ae30ace04e1
TODO: Add priority between the different pages
Above the detailed display of the "planned hour - status" table, add the total percentage of missing rides. My suggestion is:
bus logos.zip
replace the icons on the map to better icons
לכל נקודה על המפה יש attribute בשם operator_id. אגד למשל עם id=3 לכן התמונה היא 3.svg
this issue can be good for firsttimers
also:
it can be good to move all the sidebar related css to Sidebar folder
things to test:
There is a SearchContext as an model and in every page we use
const { search, setSearch } = useContext(SearchContext)
and
setSearch((current) => ({ ...current, operatorId: id })) // with some changes in different places
In my opinion, we should create a Provider for this context and make the code cleaner.
This Provider would manage the state of search.
What do you think?
@NoamGaash @ShayAdler
For now, when the user selects an invalid Date, the box is marked in red.
I think it is better to add some warning in words so the user will understand why it is red...
In addition, we should make sure that if the user enters a year before X (I think make it 2000 but maybe before or after) it will be marked as well
when visiting the homepage, it should be redirected to https://open-bus-map-search.hasadna.org.il/dashboard
.
the text "click to navigate to dashboard." should never appear
we use react-scripts, and it's deprecated
https://blog.bitsrc.io/the-future-of-react-why-create-react-app-is-deprecated-and-hooks-are-the-future-83e8a087a325
Right now, I tend to think Vite is the best alternative (if you have a different opinion, convince me)
https://dev.to/henriquejensen/migrating-from-create-react-app-to-vite-a-quick-and-easy-guide-5e72
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.