All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Adapting to Trebol API v3
- Remove classes
CustomerandSalespersonin favor ofPerson- As a result, in both cases, reference tokens to personal information are shorter
customer.person.firstName->customer.firstName
- As a result, in both cases, reference tokens to personal information are shorter
- Rename all instances of the word
SelltoOrder- Angular components
SellDetailsTableComponent->OrderDetailsTableComponentSellInformationComponent->OrderInformationComponentSellDetailUnitsControlComponent->OrderDetailUnitsControlComponentManagementSalesComponent->ManagementOrdersComponentManagementSellReviewDialogComponent->ManagementOrderReviewDialogComponent
- Angular services
ManagementSalesService->ManagementOrdersService- API services for sales data in both
httpandlocal-memorymodules
- File, class, property, function, constant and variable names
- Endpoints
/sales->/orders/sales/confirmation->/orders/confirmation/sales/rejection->/orders/rejection/sales/completion->/orders/completion
SellDetailtoOrderDetailas well
- Angular components
- Change Observable return types to
voidin API services for requesting withPOST,PUTandDELETEverbs (which will return no response body with201and204codes)- NOTE: Should
PATCHmethods be supported, the same should apply!
- NOTE: Should
- Remove classes
- API architecture
- Within their respective modules, API service classes were put together instead of being grouped "by aspect"
- The
IEntityDataApiService.fetchPagemethod signature was altered, and its 5 parameters were combined into a single separate interface type. - The HTTP implementation of the API also had another method with a similar signature,
makeHttpParams. It was refactored as a separate function. - In the HTTP module were also several abstract classes to save writing boilerplate code. These were removed because calling HTTP APIs in itself is pretty straightforward and doesn't warrant the need for inheritance like this.
- Update dependencies
- Environment variables
- Interval in miliseconds to check for current token validity
- Default product image URL
- Experimental startup loading spinner
AppServiceis replaced by three smaller, more specialized servicesSessionService- knows (but does not tell) where to save session tokens; knows whether the user has an active one; and allows to fetch (and cache) authorization detailsAuthenticationService- allows to login as user (or guest) and register, and to cancel any ongoing instance of these processesProfileService- allows to fetch (and cache) the current user's profile data, and to update it as well
ManagementHeaderComponentrefactored down to simpler components- Introduced a common
HeaderBrandComponentused in both store and management pages
- Introduced a common
- Reorganized most form components into accordingly named
forms/directories - Frontpage lists show a paginator only when they have more than one page
- Make better use of some shared components to display details of carts/sales
StoreCartContentsTablesuperseded bySellDetailsTable
- In the sales management page, a new button triggers the dialog where clerks may view its details
- Checkout-related components (in the
storemodule) split & rewritten against model classes using self-evident nomenclatureStoreCheckoutRequestFormComponenthas a form that accepts instances ofCheckoutRequestStoreBillingDetailshas a form that accepts instances ofBillingDetails- And so forth
- Among other minor changes and refactors
- (UI) User name and details would not always be correct or up-to-date
- (Performance) Make better use of existing auth HTTP APIs
- (UI) Contents of cart would be editable after confirmation
- (UX) After registration (and automatic login), the user would not retain profile info (namely their username)
- (UI) Readjusted spacing of product cards in frontpage catalog
- (UI) Set defined height for registration and guest login dialogs (for better use in mobile devices, where usually a virtual keyboard blocks the view)
- (UX) Allow mobile devices to "tab" correctly in nested forms (when pressing 'Next')
- (UX) Fetching initial sales data into the management page
- (UX) Keep auth status up-to-date and centralized, without calling the API from multiple sources
- Using actual instances of
InjectionToken<T>to provide external API services - And several minor bugfixes
- Unused components related to file upload (which may be included if the feature ever gets to the external API specification)
- Sales data cannot be edited from the management module, as the
SellFormComponentis no longer included- This may be reverted in future versions
- Service interface methods specific to sales data API
markAsConfirmed- To acknowledge an order/sell and notify the customer - HTTP/data/sales/confirmationmarkAsRejected- To prevent an order/sell to be delivered due to issues and/or refund the customer - HTTP/data/sales/rejectionmarkAsCompleted- To mark an order/sell as delivered - HTTP/data/sales/completion
- Components to display sell data
- Simple block for general data
- Table to only display details (products/units/subtotal of each)
- Dialog component for reviewing all information. Can be accessed by clicking sales management page table rows
- Includes button to view the receipt of the transaction, only if, and once it has been, paid
- Three buttons are included in the dialog, each of them acts as interface for the above mentioned interface methods for the sales data API
- Simple component for Google Maps iframe embeds
- Includes pipe for trusting external resource urls (uses
DomSanitizer)
- Includes pipe for trusting external resource urls (uses
- Search bar component for the frontpage header
- Search products page
- Can be accessed by clicking on the aforementioned search bar
- Allows filtering by category and/or product name
- Parameterizable content on the frontpage (settings can be configured using
environments)- Site logo
- Location map (at the bottom; uses above mentioned Google Map iframe embed)
- Banners (top and bottom of the page)
- Floating WhatsApp button
- Contact information in footer (email, phone number)
- Two-way binding of state and query params in frontpage. Implemented states are:
- Searching products by name and/or by category
- Viewing individual products
- Entity model
Imagenow has atargetUrlproperty- Slideshows images now may be able to hold links to redirect users to
- Bump Angular to v13.3
- Refactored architecture for inserting and updating data within the management module
- Removed
FormGroupOwnerpseudo-interface - Introduced
EntityTypeNamestype - Introduced
EntityFormGroupFactoryService; specializes in creating entity-specificFormGroups- Takes an instance of the aforementioned type
- All entity forms do not have
FormBuilderinjected to them; instead, any requiredFormGroups can be passed through an@Inputdecorator- When none is provided, these form components can fall-back to using the aforementioned service
EntityFormDialogwill invoke an entity form through its HTML template, not through an inner directive withViewContainerRef.createComponent- Updated signature for
EntityFormDialogData
- Updated signature for
- Removed
DataManagerComponentDirective<T>now exposesitems$asObservable<any[]>instead ofObservable<T[]>- When adding images,
codefield is now optional - Hide frontpage heading
- Replace title in frontpage header with search bar
AppServicenow exposes anuserName$observable- Refactored receipt page to have its card as a separate component
- Let all dialogs be closed by clicking out of their bounds, except for the
confirmationdialog - Product cards hovered in frontpage use vertical gradient as a background instead of a solid color
- Renamed
ITransactionalProductListContentsDataApiService SlideshowComponentnow integrates with Angular forms
- Modules/chunks are now effectively lazy-loaded, decreasing app loading times enormously!
- Individual item fetching in HTTP API (used when editing any data)
- Change property type of
tokeninSellmodel tostring - Missing (optional) property
unitValueinSellDetailmodel - Missing references in fake APIs
- Sales data
- Account profile
- Logic for fetching receipt data
- Several issues with responsive screens in frontpage
- Going backwards in a slideshow would omit the first index
- Prematurely end guest sessions
- Errors in products CRUD operations
- (UI) Image associations were not loaded into the form
- (Form validation) Categories were required at parent-form and child-form levels
- (HTTP API) Image associations were not included in request bodies
- (HTTP API) Filtering by partial name would send an incorrectly-named query parameter
- Do not state a limit amount of items when fetching product categories; due to their tree-like nature these must not be 'paginated'
- Add more loading indicators in the frontpage
- Product lists
- Alignment of some components
- Acept/cancel buttons in dialog to select multiple products
- Fields in personal information form
- Size adjustment of frontpage product lists (use appropiate space when there are fewer products in a list)
- Updated localization files
- All references to deprecated APIs
/public/productsand/public/categories - Some placeholder images
- Bumped Angular to v13 [BREAKING CHANGE]
- IE11 is no longer supported
- Request confirmation from user before trying to delete any data in the management section
- Image selection dialog issues
- Filter not working
- Data not being paginated
- Updated localization files
- Issue when trying to add products to cart
- Support for Product Lists [API v1.2]
- Include API model, API service, management page and UI form
- Frontpage displays existing Product Lists and their contents - instead of fetching 'all' products in existence
- Updated localization files
- Support for sort pagination parameters [API v1.1.2]
- Support for sorting and pagination in datatables in the management page
- Prices and currency values displayed with Angular currency pipe instead of adding a prefix
- Updated localization files
- Creation and general use of categories within local-memory api (such as in, the demo link)
- Issue updating categories due to calling API with wrong query parameters
- Issue opening sales data for edition due to bad template binding
- Angular i18n support
- Include localization package
- Mark text for translation - Now it's possible to generate translation files using the command
ng extract-i18n - Translate texts to English, set as default language in
angular.json - Include files and build configurations in
angular.jsonfor the following locales:en-US(default)eses-CL(previous default)
- API models
- New Class
Shipperclass with a singlenameproperty [API v1.0.4]
- New Class
- UI/UX
- Manipulation of shippers
- Manipulation of a product's category
- Manipulation of all product categories through a tree view
- Route added to the Management sidenav
- This tree works on the assumption that categories are identified by a string property named
code
- API models
Image- addcodeproperty [API v1.0.4]Person- splitnameproperty into two:lastNameandfirstName[API v1.1.0]ReceiptDetail- addunitValueproperty [API v1.1.1]Receipt- Add properties
token,taxValue,transportValue,totalValue,totalItems[API v1.1.1] totalValuewill replaceamount; make the former required and the latter optional [API v1.1.1]amountwill be removed in future versions
- Add properties
ProductCategory- changed type ofcodefrom number to string [API v.1.2]
- UI/UX
- Remove requirement of category in interface for creating/editing products
- Receipt page
- Added table component to display details
- Include new information added to the model itself
- API paths deprecation
- Use query parameters instead of path parameters for all single-entity operations
- e.g.
/data/products/1would now be called as/data/products?id=1
- e.g.
- Use query parameters instead of path parameters for all single-entity operations
- Footer remains stuck at the bottom of the page, instead of the viewport
- Interface to upload images in management module not creating any data
- There is no available API for uploading images; use a plain-text form as fallback
- Old
localhost.proxy.conf.jsonused to bypass CORS e.g. for servers running in localhost- Angular still guides users on how to create these, but it's not a good practice
- Servers should always have CORS enabled and configured so that JavaScript apps can access them (see https://enable-cors.org/)
- Testing
- Included Edge browser launcher for Karma tests
- Fixed all warnings raised during unit tests
- Login status not refreshing when using local memory (mock) api module
- Fix related unit tests
First public version.