Skip to content

Commit 5e966eb

Browse files
committed
Fixed the issue in edit vehicle component. Changed seed script
1 parent 5659119 commit 5e966eb

File tree

3 files changed

+77
-44
lines changed

3 files changed

+77
-44
lines changed

apps/car-rental/src/components/vehicles/edit-vehicle-form/edit-vehicle-form.component.spec.ts

+15
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,25 @@ describe('EditVehicleFormComponent', () => {
183183
it('should load vehicle brands on init', () => {
184184
component.ngOnInit();
185185
expect(vehicleBrandsService.getVehicleBrands).toHaveBeenCalled();
186+
expect(component.vehicleBrands).toEqual([
187+
{ name: 'Honda' } as VehicleBrandDto,
188+
{ name: 'Toyota' } as VehicleBrandDto,
189+
]);
190+
});
191+
192+
it('should ensure selected brand is visible', () => {
193+
component.vehicleBrands = [
194+
{ name: 'Toyota' } as VehicleBrandDto,
195+
{ name: 'Honda' } as VehicleBrandDto,
196+
];
197+
component.vehicle.brand = 'Opel';
198+
component.ensureSelectedBrandIsVisible();
186199
expect(component.vehicleBrands).toEqual([
187200
{ name: 'Toyota' } as VehicleBrandDto,
188201
{ name: 'Honda' } as VehicleBrandDto,
202+
{ name: 'Opel' } as VehicleBrandDto,
189203
]);
204+
expect(component.vehicleForm.get('brand')?.value).toBe('Opel');
190205
});
191206

192207
});

apps/car-rental/src/components/vehicles/edit-vehicle-form/edit-vehicle-form.component.ts

+31-13
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,18 @@ export class EditVehicleFormComponent implements OnInit {
9393
this.vehicleCopy.clientAddress?.administrativeArea || '',
9494
[Validators.minLength(2), Validators.maxLength(100)]
9595
),
96-
city: new FormControl(
97-
this.vehicleCopy.clientAddress?.city || '',
98-
[Validators.minLength(2), Validators.maxLength(100)]
99-
),
96+
city: new FormControl(this.vehicleCopy.clientAddress?.city || '', [
97+
Validators.minLength(2),
98+
Validators.maxLength(100),
99+
]),
100100
postalCode: new FormControl(
101101
this.vehicleCopy.clientAddress?.postalCode || '',
102102
[Validators.minLength(2), Validators.maxLength(100)]
103103
),
104-
street: new FormControl(
105-
this.vehicleCopy.clientAddress?.street || '',
106-
[Validators.minLength(2), Validators.maxLength(100)]
107-
)
104+
street: new FormControl(this.vehicleCopy.clientAddress?.street || '', [
105+
Validators.minLength(2),
106+
Validators.maxLength(100),
107+
]),
108108
}),
109109
});
110110
}
@@ -115,6 +115,7 @@ export class EditVehicleFormComponent implements OnInit {
115115

116116
onDropdownOpened(isOpened: boolean): void {
117117
if (isOpened) {
118+
this.onScroll();
118119
this.scrollSubscription = fromEvent(
119120
this.brandDropdown.panel.nativeElement,
120121
'scroll'
@@ -143,26 +144,43 @@ export class EditVehicleFormComponent implements OnInit {
143144
page: this.vehicleBrandsCurrentPage,
144145
})
145146
.subscribe((response) => {
146-
this.vehicleBrands = [...this.vehicleBrands, ...response.data];
147+
const filteredBrands = response.data.filter(
148+
(brand) => brand.name !== this.vehicleForm.get('brand')?.value
149+
);
150+
this.vehicleBrands = [...this.vehicleBrands, ...filteredBrands].sort(
151+
(brand1, brand2) => brand1.name.localeCompare(brand2.name)
152+
);
153+
this.ensureSelectedBrandIsVisible();
147154
this.vehicleBrandsCurrentPage++;
148155
});
149156
}
150157

158+
ensureSelectedBrandIsVisible(): void {
159+
const selectedBrand = this.vehicle.brand;
160+
if (!this.vehicleBrands.some((brand) => brand.name === selectedBrand)) {
161+
this.vehicleBrands.push({ name: selectedBrand } as VehicleBrandDto);
162+
}
163+
this.vehicleForm.get('brand')?.setValue(selectedBrand);
164+
}
165+
151166
isClientAddressEmpty(clientAddress: CreateAddressDto): boolean {
152167
return Object.values(clientAddress).some((value) => value === '');
153168
}
154169

155170
onSubmit(): void {
156171
this.isLoading = true;
157-
const { clientAddress, clientEmail, ...vehicleData } = this.vehicleForm.value;
158-
if(this.vehicleCopy.clientAddress) {
159-
if((this.vehicleCopy.clientAddress as AddressDto).id) {
172+
const { clientAddress, clientEmail, ...vehicleData } =
173+
this.vehicleForm.value;
174+
if (this.vehicleCopy.clientAddress) {
175+
if ((this.vehicleCopy.clientAddress as AddressDto).id) {
160176
clientAddress.id = (this.vehicleCopy.clientAddress as AddressDto).id;
161177
}
162178
}
163179
const updateVehicleData: UpdateVehicleDto = {
164180
...vehicleData,
165-
clientAddress: this.isClientAddressEmpty(clientAddress) ? undefined : clientAddress,
181+
clientAddress: this.isClientAddressEmpty(clientAddress)
182+
? undefined
183+
: clientAddress,
166184
clientEmail: !clientEmail ? undefined : clientEmail,
167185
};
168186
this.vehiclesService

scripts/4_seed_data.sql

+31-31
Original file line numberDiff line numberDiff line change
@@ -40,37 +40,37 @@ VALUES
4040
INSERT INTO
4141
addresses (street, city, administrativeArea, postalCode, country)
4242
VALUES
43-
('ul. Marszałkowska 1', 'Warszawa', 'Mazowieckie', '00-001', 'Poland'),
44-
('ul. Piotrkowska 2', 'Łódź', 'Łódzkie', '90-001', 'Poland'),
45-
('ul. Długa 3', 'Kraków', 'Małopolskie', '30-001', 'Poland'),
46-
('ul. Półwiejska 4', 'Poznań', 'Wielkopolskie', '61-001', 'Poland'),
47-
('ul. Świdnicka 5', 'Wrocław', 'Dolnośląskie', '50-001', 'Poland'),
48-
('ul. Główna 6', 'Gdańsk', 'Pomorskie', '80-001', 'Poland'),
49-
('ul. Szeroka 7', 'Szczecin', 'Zachodniopomorskie', '70-001', 'Poland'),
50-
('ul. Krótka 8', 'Bydgoszcz', 'Kujawsko-Pomorskie', '85-001', 'Poland'),
51-
('ul. Nowa 9', 'Lublin', 'Lubelskie', '20-001', 'Poland'),
52-
('ul. Stara 10', 'Katowice', 'Śląskie', '40-001', 'Poland'),
53-
('ul. Wąska 11', 'Białystok', 'Podlaskie', '15-001', 'Poland'),
54-
('ul. Słoneczna 12', 'Rzeszów', 'Podkarpackie', '35-001', 'Poland'),
55-
('ul. Zielona 13', 'Opole', 'Opolskie', '45-001', 'Poland'),
56-
('ul. Jasna 14', 'Kielce', 'Świętokrzyskie', '25-001', 'Poland'),
57-
('ul. Cicha 15', 'Olsztyn', 'Warmińsko-Mazurskie', '10-001', 'Poland'),
58-
('ul. Leśna 16', 'Zielona Góra', 'Lubuskie', '65-001', 'Poland'),
59-
('ul. Polna 17', 'Gorzów Wielkopolski', 'Lubuskie', '66-001', 'Poland'),
60-
('ul. Wrocławska 18', 'Legnica', 'Dolnośląskie', '59-001', 'Poland'),
61-
('ul. Warszawska 19', 'Radom', 'Mazowieckie', '26-001', 'Poland'),
62-
('ul. Krakowska 20', 'Tarnów', 'Małopolskie', '33-001', 'Poland'),
63-
('ul. Poznańska 21', 'Kalisz', 'Wielkopolskie', '62-001', 'Poland'),
64-
('ul. Łódzka 22', 'Piotrków Trybunalski', 'Łódzkie', '97-001', 'Poland'),
65-
('ul. Górna 23', 'Wałbrzych', 'Dolnośląskie', '58-001', 'Poland'),
66-
('ul. Dolna 24', 'Koszalin', 'Zachodniopomorskie', '75-001', 'Poland'),
67-
('ul. Środkowa 25', 'Słupsk', 'Pomorskie', '76-001', 'Poland'),
68-
('ul. Wschodnia 26', 'Elbląg', 'Warmińsko-Mazurskie', '82-001', 'Poland'),
69-
('ul. Zachodnia 27', 'Płock', 'Mazowieckie', '09-001', 'Poland'),
70-
('ul. Północna 28', 'Ostrołęka', 'Mazowieckie', '07-001', 'Poland'),
71-
('ul. Południowa 29', 'Siedlce', 'Mazowieckie', '08-001', 'Poland'),
72-
('ul. Centralna 30', 'Przemyśl', 'Podkarpackie', '37-001', 'Poland'),
73-
('ul. 11 Listopada 31', 'Bielsko-Biała', 'Śląskie', '43-300', 'Poland');
43+
('ul. Marszałkowska 1', 'Warszawa', 'Mazowieckie', '00-001', 'Polska'),
44+
('ul. Piotrkowska 2', 'Łódź', 'Łódzkie', '90-001', 'Polska'),
45+
('ul. Długa 3', 'Kraków', 'Małopolskie', '30-001', 'Polska'),
46+
('ul. Półwiejska 4', 'Poznań', 'Wielkopolskie', '61-001', 'Polska'),
47+
('ul. Świdnicka 5', 'Wrocław', 'Dolnośląskie', '50-001', 'Polska'),
48+
('ul. Główna 6', 'Gdańsk', 'Pomorskie', '80-001', 'Polska'),
49+
('ul. Szeroka 7', 'Szczecin', 'Zachodniopomorskie', '70-001', 'Polska'),
50+
('ul. Krótka 8', 'Bydgoszcz', 'Kujawsko-Pomorskie', '85-001', 'Polska'),
51+
('ul. Nowa 9', 'Lublin', 'Lubelskie', '20-001', 'Polska'),
52+
('ul. Stara 10', 'Katowice', 'Śląskie', '40-001', 'Polska'),
53+
('ul. Wąska 11', 'Białystok', 'Podlaskie', '15-001', 'Polska'),
54+
('ul. Słoneczna 12', 'Rzeszów', 'Podkarpackie', '35-001', 'Polska'),
55+
('ul. Zielona 13', 'Opole', 'Opolskie', '45-001', 'Polska'),
56+
('ul. Jasna 14', 'Kielce', 'Świętokrzyskie', '25-001', 'Polska'),
57+
('ul. Cicha 15', 'Olsztyn', 'Warmińsko-Mazurskie', '10-001', 'Polska'),
58+
('ul. Leśna 16', 'Zielona Góra', 'Lubuskie', '65-001', 'Polska'),
59+
('ul. Polna 17', 'Gorzów Wielkopolski', 'Lubuskie', '66-001', 'Polska'),
60+
('ul. Wrocławska 18', 'Legnica', 'Dolnośląskie', '59-001', 'Polska'),
61+
('ul. Warszawska 19', 'Radom', 'Mazowieckie', '26-001', 'Polska'),
62+
('ul. Krakowska 20', 'Tarnów', 'Małopolskie', '33-001', 'Polska'),
63+
('ul. Poznańska 21', 'Kalisz', 'Wielkopolskie', '62-001', 'Polska'),
64+
('ul. Łódzka 22', 'Piotrków Trybunalski', 'Łódzkie', '97-001', 'Polska'),
65+
('ul. Górna 23', 'Wałbrzych', 'Dolnośląskie', '58-001', 'Polska'),
66+
('ul. Dolna 24', 'Koszalin', 'Zachodniopomorskie', '75-001', 'Polska'),
67+
('ul. Środkowa 25', 'Słupsk', 'Pomorskie', '76-001', 'Polska'),
68+
('ul. Wschodnia 26', 'Elbląg', 'Warmińsko-Mazurskie', '82-001', 'Polska'),
69+
('ul. Zachodnia 27', 'Płock', 'Mazowieckie', '09-001', 'Polska'),
70+
('ul. Północna 28', 'Ostrołęka', 'Mazowieckie', '07-001', 'Polska'),
71+
('ul. Południowa 29', 'Siedlce', 'Mazowieckie', '08-001', 'Polska'),
72+
('ul. Centralna 30', 'Przemyśl', 'Podkarpackie', '37-001', 'Polska'),
73+
('ul. 11 Listopada 31', 'Bielsko-Biała', 'Śląskie', '43-300', 'Polska');
7474

7575
-- Insert data into vehicles table
7676
INSERT INTO

0 commit comments

Comments
 (0)