diff --git a/flatrent/package-lock.json b/flatrent/package-lock.json
index 87b0e6e..d74c9aa 100644
--- a/flatrent/package-lock.json
+++ b/flatrent/package-lock.json
@@ -1333,6 +1333,14 @@
"@types/react": "*"
}
},
+ "@types/react-infinite-scroller": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@types/react-infinite-scroller/-/react-infinite-scroller-1.2.1.tgz",
+ "integrity": "sha512-64bpbqdSgtmy1zSZ2AQoFzguwZO7TyKjqJRTEnfNMCAQbnrX90kz+rYufZyY9CmzhwpXMwRO8xR9fMQnbYUkgQ==",
+ "requires": {
+ "@types/react": "*"
+ }
+ },
"@types/react-inlinesvg": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@types/react-inlinesvg/-/react-inlinesvg-0.8.1.tgz",
@@ -15306,6 +15314,14 @@
}
}
},
+ "react-infinite-scroller": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz",
+ "integrity": "sha512-/oOa0QhZjXPqaD6sictN2edFMsd3kkMiE19Vcz5JDgHpzEJVqYcmq+V3mkwO88087kvKGe1URNksHEOt839Ubw==",
+ "requires": {
+ "prop-types": "^15.5.8"
+ }
+ },
"react-inlinesvg": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/react-inlinesvg/-/react-inlinesvg-0.8.4.tgz",
@@ -16091,6 +16107,18 @@
}
}
},
+ "react-with-styles-interface-aphrodite": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/react-with-styles-interface-aphrodite/-/react-with-styles-interface-aphrodite-5.0.1.tgz",
+ "integrity": "sha512-heDh8B8GkmyFeIey8xFNMq8oUEzi8yu+E1OhXX04SO6r5nq4KUDxtUSY4uU/ZzKTACRe/51LaqXaxaExhe6t7g==",
+ "requires": {
+ "array.prototype.flat": "^1.2.1",
+ "has": "^1.0.3",
+ "object.assign": "^4.1.0",
+ "object.entries": "^1.0.4",
+ "rtl-css-js": "^1.10.0"
+ }
+ },
"react-with-styles-interface-css": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/react-with-styles-interface-css/-/react-with-styles-interface-css-4.0.3.tgz",
@@ -16798,6 +16826,14 @@
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
"integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw=="
},
+ "rtl-css-js": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.11.0.tgz",
+ "integrity": "sha512-YnZ6jWxZxlWlcQAGF9vOmiF9bEmoQmSHE+wsrsiILkdK9HqiRPAIll4SY/QDzbvEu2lB2h62+hfg3TYzjnldbA==",
+ "requires": {
+ "@babel/runtime": "^7.1.2"
+ }
+ },
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
diff --git a/flatrent/package.json b/flatrent/package.json
index bf83de3..2e3dc0b 100644
--- a/flatrent/package.json
+++ b/flatrent/package.json
@@ -11,6 +11,7 @@
"@types/node": "^10.12.18",
"@types/react": "^16.7.20",
"@types/react-dom": "^16.0.11",
+ "@types/react-infinite-scroller": "^1.2.1",
"@types/react-router": "^4.4.3",
"@types/react-router-dom": "^4.3.1",
"@types/react-toastify": "^4.0.1",
@@ -24,13 +25,16 @@
"react-dates": "^20.1.0",
"react-dom": "^16.8.6",
"react-dropzone": "^10.1.4",
+ "react-infinite-scroller": "^1.2.4",
"react-inlinesvg": "^0.8.4",
"react-responsive-carousel": "^3.1.49",
"react-router-dom": "^4.3.1",
"react-scripts": "^2.1.8",
"react-spinners": "^0.5.4",
"react-svg": "^8.0.5",
- "react-toastify": "^4.5.2"
+ "react-toastify": "^4.5.2",
+ "react-with-styles": "^3.2.1",
+ "react-with-styles-interface-aphrodite": "^5.0.1"
},
"scripts": {
"start": "react-scripts start",
diff --git a/flatrent/src/components/FlexDropzone/FlexDropzone.module.css b/flatrent/src/components/FlexDropzone/FlexDropzone.module.css
index 4fa82c0..8480b4d 100644
--- a/flatrent/src/components/FlexDropzone/FlexDropzone.module.css
+++ b/flatrent/src/components/FlexDropzone/FlexDropzone.module.css
@@ -35,13 +35,10 @@
position: relative;
overflow: hidden;
border-radius: 4px;
-}
-
-.thumbInner {
transition: opacity 0.2s;
}
-.thumbInner:hover {
+.thumb:hover {
cursor: pointer;
opacity: 0.5;
}
@@ -59,3 +56,11 @@
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
+
+.textThumb {
+ position: absolute;
+ top: 0;
+ left: 0;
+ word-break: break-all;
+ text-overflow: ellipsis;
+}
diff --git a/flatrent/src/components/FlexDropzone/FlexDropzone.tsx b/flatrent/src/components/FlexDropzone/FlexDropzone.tsx
index 8799f2d..741f71a 100644
--- a/flatrent/src/components/FlexDropzone/FlexDropzone.tsx
+++ b/flatrent/src/components/FlexDropzone/FlexDropzone.tsx
@@ -51,22 +51,29 @@ function FlexDropzone({text, className, onDrop, minSize, maxSize, maxFiles = 8,
files.forEach((file) => URL.revokeObjectURL(file.preview));
}, [files]);
- const removeImage = (name: string, size: number) =>
- () => setFiles(files.filter((f) => f.name !== name && f.size !== size));
+ const removeItem = (name: string, size: number) =>
+ () => setFiles(files.filter((f) => f.name !== name));
+
+ const getThumbContent = (file: IPreviewFile) => {
+ if (file.type.startsWith("image")) {
+ return (
);
+ } else {
+ return {file.name};
+ }
+ }
const thumbs = files.map((file) => (
-
-

-
+ {getThumbContent(file)}
));
+
return (
diff --git a/flatrent/src/components/InputForm/InputAreaForm.tsx b/flatrent/src/components/InputForm/InputAreaForm.tsx
index bdcf85e..a59e2ec 100644
--- a/flatrent/src/components/InputForm/InputAreaForm.tsx
+++ b/flatrent/src/components/InputForm/InputAreaForm.tsx
@@ -1,5 +1,6 @@
import React, { ChangeEvent, Component } from "react";
import Styles from "./InputForm.module.css";
+import { joined } from "../../utilities/Utilities";
interface InputAreaFormProps {
className?: string;
diff --git a/flatrent/src/components/InputForm/InputForm.module.css b/flatrent/src/components/InputForm/InputForm.module.css
index bc1697b..7aa508c 100644
--- a/flatrent/src/components/InputForm/InputForm.module.css
+++ b/flatrent/src/components/InputForm/InputForm.module.css
@@ -3,7 +3,7 @@
display: flex;
flex-direction: column;
text-align: left;
- flex: 1;
+ /* flex: 1; */
min-width: 0;
position: relative;
margin-top: 8px;
diff --git a/flatrent/src/index.css b/flatrent/src/index.css
index bb07b3b..e6beef6 100644
--- a/flatrent/src/index.css
+++ b/flatrent/src/index.css
@@ -1,8 +1,38 @@
html {
overflow-y: scroll;
+}
+
+/* Date Picker Custom Styles */
+
+.DateRangePicker *, .SingleDatePicker *, .DayPickerRangeController * {
box-sizing: border-box;
}
+.DateInput_input__focused {
+ border-bottom: 2px solid var(--main-accent-alt-color);
+}
+
+.CalendarDay__selected, .CalendarDay__selected:active, .CalendarDay__selected:hover {
+ background: var(--main-accent-alt-color);
+ border: 1px double var(--main-accent-alt-muted-color);
+}
+
+.CalendarDay__selected_span {
+ background: var(--main-accent-alt-muted-color);
+ border: 1px double var(--main-accent-alt-muted-color);
+}
+
+.CalendarDay__selected_span:active, .CalendarDay__selected_span:hover {
+ background: var(--main-accent-alt-color);
+ border: 1px double var(--main-accent-alt-muted-color);
+}
+
+.CalendarDay__hovered_span, .CalendarDay__hovered_span:hover {
+ background: var(--main-accent-alt-muted-color);
+ border: 1px double var(--main-accent-alt-muted-color);
+ color: white;
+}
+
body {
margin: 0;
padding: 0;
diff --git a/flatrent/src/index.tsx b/flatrent/src/index.tsx
index a61241a..9266708 100644
--- a/flatrent/src/index.tsx
+++ b/flatrent/src/index.tsx
@@ -2,8 +2,21 @@ import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import "./index.css";
-import "./variables.css";
import * as serviceWorker from "./serviceWorker";
+import "./variables.css";
+import Moment from "moment";
+
+// // tslint:disable-next-line: no-submodule-imports
+// import DefaultTheme from "react-dates/lib/theme/DefaultTheme";
+// // tslint:disable-next-line: no-submodule-imports
+// import aphroditeInterface from "react-with-styles-interface-aphrodite";
+// // tslint:disable-next-line: no-submodule-imports
+// import ThemedStyleSheet from "react-with-styles/lib/ThemedStyleSheet";
+
+// ThemedStyleSheet.registerInterface(aphroditeInterface);
+// ThemedStyleSheet.registerTheme(DefaultTheme);
+
+Moment.locale("lt");
ReactDOM.render(
, document.getElementById("root"));
diff --git a/flatrent/src/scenes/FlatCreate/FlatCreate.module.css b/flatrent/src/scenes/FlatCreate/FlatCreate.module.css
index f9da4ad..a492678 100644
--- a/flatrent/src/scenes/FlatCreate/FlatCreate.module.css
+++ b/flatrent/src/scenes/FlatCreate/FlatCreate.module.css
@@ -41,7 +41,7 @@
margin-top: 24px;
}
-.input, .requirementsArea, .descriptionArea {
+.input, .requirementsArea, .descriptionArea, .button {
margin-left: 4px;
margin-right: 4px;
}
diff --git a/flatrent/src/scenes/FlatCreate/FlatCreate.tsx b/flatrent/src/scenes/FlatCreate/FlatCreate.tsx
index 39f4f7d..ad5f29f 100644
--- a/flatrent/src/scenes/FlatCreate/FlatCreate.tsx
+++ b/flatrent/src/scenes/FlatCreate/FlatCreate.tsx
@@ -271,10 +271,10 @@ class CreateFlat extends Component
{
/>
-
diff --git a/flatrent/src/scenes/FlatDetails/FlatDetails.module.css b/flatrent/src/scenes/FlatDetails/FlatDetails.module.css
index e6dbd86..d372705 100644
--- a/flatrent/src/scenes/FlatDetails/FlatDetails.module.css
+++ b/flatrent/src/scenes/FlatDetails/FlatDetails.module.css
@@ -169,19 +169,30 @@
display: flex;
flex-direction: column;
justify-content: center;
- align-content: center;
}
.modal {
pointer-events: all;
- width: 350px;
+ width: var(--main-width);
+ max-width: var(--main-max-width);
height: 500px;
background: white;
align-self: center;
- justify-self: center;
}
.editLink {
color: var(--text-color);
font-family: var(--title-font-family);
}
+
+.datepickerWrapper {
+ display: block;
+ margin-top: 20px;
+ margin-bottom: 20px;
+}
+
+.infoInPicker {
+ width: 100%;
+ text-align: center;
+ padding: 0px 4px 12px 4px;
+}
diff --git a/flatrent/src/scenes/FlatDetails/FlatDetails.tsx b/flatrent/src/scenes/FlatDetails/FlatDetails.tsx
index 858efc2..5a1289b 100644
--- a/flatrent/src/scenes/FlatDetails/FlatDetails.tsx
+++ b/flatrent/src/scenes/FlatDetails/FlatDetails.tsx
@@ -14,6 +14,7 @@ import RentModal from "./RentModal";
import FlexColumn from "../../components/FlexColumn";
import { flatEditUrl } from "../../utilities/Utilities";
import UserService from "../../services/UserService";
+import { StaticContext } from "react-router";
interface IFlatDetailsState {
loading: boolean;
@@ -33,11 +34,14 @@ class FlatDetails extends Component, IFlatDe
public render() {
const { flat } = this.state;
- const editNode = flat !== undefined && UserService.canEdit(flat.owner.id) ? (
- Redaguoti
- ) : (
- <>>
- );
+ const editNode =
+ flat !== undefined && UserService.canEdit(flat.owner.id) ? (
+
+ Redaguoti
+
+ ) : (
+ <>>
+ );
return (
<>
@@ -47,7 +51,7 @@ class FlatDetails extends Component, IFlatDe
/>
- {editNode}
+ {editNode}
@@ -59,16 +63,28 @@ class FlatDetails extends Component, IFlatDe
-
+ {this.getRentRoute()}
>
);
}
+ private getRentRoute = () => {
+ return this.state.flat !== undefined ? (
+
+ ) : (
+ <>>
+ );
+ };
+
+ private getRentModal = (props: RouteComponentProps) => (
+ this.state.flat !== undefined ? : <>>
+ );
+
private fetchFlat = (id: string) => {
FlatService.getFlat(id)
.then(this.handleResult)
.catch(this.handleFail);
- }
+ };
private handleResult = (result: IFlatDetailsResponse) => {
if (result.errors !== undefined) {
@@ -77,7 +93,7 @@ class FlatDetails extends Component, IFlatDe
} else if (result.flat !== undefined) {
this.setState({ flat: result.flat, loading: false });
}
- }
+ };
private handleFail() {
toast.error("Įvyko nežinoma klaida.");
diff --git a/flatrent/src/scenes/FlatDetails/RentModal.module.css b/flatrent/src/scenes/FlatDetails/RentModal.module.css
new file mode 100644
index 0000000..819f71e
--- /dev/null
+++ b/flatrent/src/scenes/FlatDetails/RentModal.module.css
@@ -0,0 +1,72 @@
+
+.modalWrapper {
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ overflow-y: auto;
+}
+
+.modal {
+ pointer-events: all;
+ width: var(--main-width);
+ max-width: var(--main-max-width);
+ height: fit-content;
+ max-height: calc(100% - 40px);
+ overflow-y: auto;
+ background: white;
+ align-self: center;
+ padding: 20px;
+ border-radius: 4px;
+ margin: auto;
+}
+
+.editLink {
+ color: var(--text-color);
+ font-family: var(--title-font-family);
+}
+
+.datepickerWrapper {
+ display: block;
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+.infoInPicker {
+ width: 100%;
+ text-align: center;
+ padding: 0px 4px 12px 4px;
+}
+
+.inputArea {
+ height: 10em;
+}
+
+.dropzone {
+ margin-top: 12px;
+ margin-bottom: 12px;
+}
+
+.button {
+}
+
+.title {
+ font-family: var(--title-font-family);
+ font-size: 1.4em;
+ margin-bottom: 16px;
+}
+
+.subTitle {
+ font-family: var(--title-font-family);
+ font-weight: 500;
+ text-align: left;
+ margin-bottom: 8px;
+}
+
+.subText {
+ text-align: left;
+ margin-bottom: 16px;
+}
+
+.subRow {
+ justify-content: space-between;
+}
diff --git a/flatrent/src/scenes/FlatDetails/RentModal.tsx b/flatrent/src/scenes/FlatDetails/RentModal.tsx
index 3514579..944ece2 100644
--- a/flatrent/src/scenes/FlatDetails/RentModal.tsx
+++ b/flatrent/src/scenes/FlatDetails/RentModal.tsx
@@ -1,22 +1,31 @@
import React, { Component } from "react";
import { RouteComponentProps, withRouter } from "react-router-dom";
import { toast } from "react-toastify";
+import Dimmer from "../../components/Dimmer";
import FlexRow from "../../components/FlexRow";
import FlatService, { IFlatDetails, IFlatDetailsResponse } from "../../services/FlatService";
-import Styles from "./FlatDetails.module.css";
-import Dimmer from "../../components/Dimmer";
import { flatUrl, stopPropogation } from "../../utilities/Utilities";
+import Styles from "./RentModal.module.css";
-import {DateRangePicker} from "react-dates";
+import Moment from "moment";
+import "moment/locale/lt";
import "react-dates/initialize";
import "react-dates/lib/css/_datepicker.css";
+import {DateRangePicker, FocusedInputShape, SingleDatePicker, DateRangePickerPhrases} from "react-dates";
import FlexColumn from "../../components/FlexColumn";
+import Button from "../../components/Button";
+import FlexDropzone from "../../components/FlexDropzone";
+import { InputAreaForm } from "../../components/InputForm";
+// import moment = require("moment");
+Moment.locale("lt");
interface IRentModalState {
loading: boolean;
- flat?: IFlatDetails;
errors: { [key: string]: string[] };
values: { [key: string]: string; from: string; to: string; comments: string };
+ startDate: Moment.Moment | null;
+ endDate: Moment.Moment | null;
+ focusedInput: FocusedInputShape | null;
}
const getOffsetDate = (years: number, months: number, days: number): string => {
@@ -42,45 +51,130 @@ const getOffsetDate = (years: number, months: number, days: number): string => {
return `${yyyy}-${mmStr}-${ddStr}`;
};
-class RentModal extends Component, IRentModalState> {
- constructor(props: RouteComponentProps<{ id: string }>) {
+export interface IRentModalProps {
+ flat: IFlatDetails;
+}
+
+class RentModal extends Component & IRentModalProps, IRentModalState> {
+ constructor(props: RouteComponentProps<{ id: string }> & IRentModalProps) {
super(props);
+ console.log("construct", props);
this.state = {
loading: true,
- flat: undefined,
errors: {},
values: { from: getOffsetDate(0, 0, 0), to: getOffsetDate(0, 1, 7), comments: "" },
+ startDate: null,
+ endDate: null,
+ focusedInput: null,
};
}
public render() {
- const { flat } = this.state;
+ const { flat } = this.props;
return (
- console.log(startDate, endDate)} // PropTypes.func.isRequired,
- focusedInput={"startDate"} // PropTypes.oneOf([START_DATE, END_DATE]) or null,
- onFocusChange={focusedInput => console.log(focusedInput)} // PropTypes.func.isRequired,
+
+ Buto nuoma
+
+
+
+ Pageidavimai nuomininkui:
+
+
+ {flat.tenantRequirements}
+
+
+
+
+
+ Kaina mėnesiui:
+
+
+ {flat.price} Eur
+
+
+
+
+
+
+
+
+
+ Nuomos trukmė:
+
+
+ {this.getDaysSelected()} d.
+
+
+
+ {}} title="Papildoma informacija" />
+ {}}
+ text={"Pridėti papildomus failus nurodytus pageidavimuose, bei patvirtinančius Jūsų nuomos sutarties prašymą."}
/>
+ {}}>Pasirašyti
);
}
+ private isDayBlocked = (day: Moment.Moment): boolean => {
+ if (this.state.focusedInput === "startDate") {
+ return day.isBefore(Moment().add(14, 'days'));
+ }
+ if (this.state.focusedInput === "endDate" && this.state.startDate !== null) {
+ // console.log(day.diff(this.state.startDate, "month", true));
+ return day.isBefore(this.state.startDate); // || day.diff(this.state.startDate, "month", true).toString().indexOf(".") !== -1;
+ }
+ return false;
+ }
+
+ private getDaysSelected = () =>
+ this.state.startDate === null || this.state.endDate === null
+ ? "0"
+ : this.state.endDate.diff(this.state.startDate, "day");
+
+ private getInfo = () =>
+ <>
+ Nuoma gali prasidėti už 14 d.
+ Trumpiausias nuomos laikotarpis: {this.props.flat.minimumRentDays} d.
+ >;
+
+ private updateDates = ({startDate, endDate}: {startDate: Moment.Moment | null, endDate: Moment.Moment | null}) =>
+ this.setState({ startDate, endDate });
+
+ private updateFocusedInput = (focusedInput: FocusedInputShape | null) =>
+ this.setState({ focusedInput });
+
private handleFail() {
toast.error("Įvyko nežinoma klaida.");
}
private exitModal = (evt: React.MouseEvent) => {
- this.props.history.push(flatUrl(this.props.match.params.id));
+ this.props.history.push(flatUrl(this.props.flat.id));
}
}
diff --git a/flatrent/src/scenes/Flats/FlatBox.tsx b/flatrent/src/scenes/Flats/FlatBox.tsx
index 99e4570..0bd3c76 100644
--- a/flatrent/src/scenes/Flats/FlatBox.tsx
+++ b/flatrent/src/scenes/Flats/FlatBox.tsx
@@ -1,13 +1,12 @@
import React from "react";
+import ContentLoader from "react-content-loader";
+import { Link } from "react-router-dom";
import FlexColumn from "../../components/FlexColumn";
+import SmartImg from "../../components/SmartImg";
import { getImageUrl } from "../../services/ApiUtilities";
-import { getAddressString, IFlatListItem } from "../../services/FlatService";
-import { roomOrRooms, flatUrl, joined } from "../../utilities/Utilities";
+import { IFlatListItem } from "../../services/FlatService";
+import { flatUrl, roomOrRooms } from "../../utilities/Utilities";
import Styles from "./FlatBox.module.css";
-import SmartImg from "../../components/SmartImg";
-import { withRouter, Link } from "react-router-dom";
-import { RouterProps, RouteComponentProps } from "react-router";
-import ContentLoader from "react-content-loader";
interface IFlatItemProps {
flat: IFlatListItem;
diff --git a/flatrent/src/scenes/Flats/FlatCreateBox.module.css b/flatrent/src/scenes/Flats/FlatCreateBox.module.css
deleted file mode 100644
index fb1cf14..0000000
--- a/flatrent/src/scenes/Flats/FlatCreateBox.module.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.card {
- align-items: center;
- display: flex;
- flex-direction: row;
- font-size: 1.2em;
- justify-content: space-between;
-}
-
-.button {
- display: inline-flex;
- margin-left: 12px;
-}
diff --git a/flatrent/src/scenes/Flats/FlatCreateBox.tsx b/flatrent/src/scenes/Flats/FlatCreateBox.tsx
deleted file mode 100644
index 2534254..0000000
--- a/flatrent/src/scenes/Flats/FlatCreateBox.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from "react";
-import { RouteComponentProps, withRouter } from "react-router-dom";
-import Button from "../../components/Button";
-import Card from "../../components/Card";
-import UserService, { Policies } from "../../services/UserService";
-import Styles from "./FlatCreateBox.module.css";
-
-const FlatCreateBox = (props: RouteComponentProps) => {
- const routeTo = () => props.history.push("/flats/create");
-
- return (
-
- Sukurti naują butą
-
- Sukurti
-
-
- );
-};
-
-export default withRouter(FlatCreateBox);
diff --git a/flatrent/src/scenes/Flats/FlatItem.module.css b/flatrent/src/scenes/Flats/FlatItem.module.css
deleted file mode 100644
index a6f2977..0000000
--- a/flatrent/src/scenes/Flats/FlatItem.module.css
+++ /dev/null
@@ -1,69 +0,0 @@
-.flat {
- font-size: 20px;
- display: flex;
- flex-direction: row;
- align-items: center;
- margin: 5px;
- padding-top: 0 !important;
- padding-bottom: 0 !important;
- max-width: 640px;
- width: 100%;
-}
-
-.content {
- padding: 20px;
- display: flex;
- flex-direction: row;
-}
-
-.text {
- text-align: left;
- display: flex;
- flex-direction: column;
- margin: 0 10px;
-}
-
-.title {
- font-size: 1.2em;
-}
-
-.address {
- font-size: 0.9em;
-}
-
-.openButton {
- font-size: 1em;
- padding: 8px 14px;
- align-self: center;
- margin: 0 0 0 12px;
- color: var(--main-accent-alt-color);
- background-color: var(--main-bg-color);
- /* border: 2px solid var(--main-accent-alt-color); */
- transition: all 0.3s;
-
- border-radius: 0;
- border: 2px solid rgba(var(--main-accent-alt-color-rgb), 0.6);
-}
-
-.openButton:hover {
- background-color: rgba(var(--main-accent-alt-color-rgb), 0.1);
- box-shadow: none;
-}
-
-.image {
- max-height: 150px;
- object-fit: contain;
- /* display: flex; */
- /* flex-basis: auto;
- flex-grow: 1;
- flex-shrink: 1; */
-}
-
-.image img {
- /* height: auto; */
- max-height: 150px;
- height: 100%;
- width: auto;
- object-fit: contain;
- /* width: 100%; */
-}
diff --git a/flatrent/src/scenes/Flats/FlatItem.tsx b/flatrent/src/scenes/Flats/FlatItem.tsx
deleted file mode 100644
index 4dc746a..0000000
--- a/flatrent/src/scenes/Flats/FlatItem.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from "react";
-import Button from "../../components/Button";
-import Card from "../../components/Card";
-import { getAddressString, IFlatListItem } from "../../services/FlatService";
-import Styles from "./FlatItem.module.css";
-import { ApiHostname } from "../../services/Settings";
-
-interface IFlatItemProps {
- flat: IFlatListItem;
- onClick: (id: string) => void;
-}
-
-const FlatItem = ({ flat, onClick }: IFlatItemProps) => {
- const func = () => onClick(flat.id);
- return (
-
-
-

-
-
-
- {flat.name}
- {/* {getAddressString(flat.address)} */}
-
-
- Plačiau
-
-
-
- );
-};
-
-export default FlatItem;
diff --git a/flatrent/src/scenes/Flats/FlatList.module.css b/flatrent/src/scenes/Flats/FlatList.module.css
index 8029aca..8df7322 100644
--- a/flatrent/src/scenes/Flats/FlatList.module.css
+++ b/flatrent/src/scenes/Flats/FlatList.module.css
@@ -5,3 +5,10 @@
margin-top: 36px;
justify-content: flex-start;
}
+
+.scroller {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
diff --git a/flatrent/src/scenes/Flats/FlatList.tsx b/flatrent/src/scenes/Flats/FlatList.tsx
index 1c689c3..45ddd9b 100644
--- a/flatrent/src/scenes/Flats/FlatList.tsx
+++ b/flatrent/src/scenes/Flats/FlatList.tsx
@@ -1,56 +1,56 @@
import React, { Component, ReactNode } from "react";
+import InfiniteScroll from "react-infinite-scroller";
import { RouteComponentProps } from "react-router-dom";
import { toast } from "react-toastify";
+import FlexRow from "../../components/FlexRow";
import FlatService, { IFlatListItem, IFlatListResponse } from "../../services/FlatService";
-import CreateFlatBox from "./FlatCreateBox";
-import FlatItem from "./FlatItem";
-import Card from "../../components/Card";
-import FlatFilters from "./FlatFilters";
import FlatBox, { FlatBoxLoader } from "./FlatBox";
-import FlexRow from "../../components/FlexRow";
import Styles from "./FlatList.module.css";
-import ContentLoader from "react-content-loader";
class FlatList extends Component<
RouteComponentProps,
- { pageSize: number; page: number; rented: boolean; flats: IFlatListItem[] }
+ { pageSize: number; page: number; hasMore: boolean; flats: IFlatListItem[] }
> {
constructor(props: Readonly) {
super(props);
- this.state = { pageSize: 20, page: 1, rented: false, flats: [] };
- this.getFlats(this.state.pageSize, this.state.page, this.state.rented);
+ this.state = { pageSize: 20, page: 0, hasMore: true, flats: [] };
+ this.loadFlats(this.state.page);
}
public render() {
return (
{/* */}
- {/* */}
- {this.getFlatItems()}
+
+ {this.getFlatItems()}
+
);
}
- private handleShowRentedChange = (rented: boolean) => {
- this.setState({ rented });
- this.getFlats(this.state.pageSize, this.state.page, rented);
- };
-
- private openFlat = (id: string) => {
- this.props.history.push(`/flat/${id}`);
- };
-
private getFlatItems(): ReactNode[] {
const flats = this.state.flats.map((flat) => );
if (flats.length > 0) {
return flats;
} else {
- return Array(12).fill();
+ return this.getLoaderItems(12);
}
}
- private getFlats(pageSize: number, page: number, rented: boolean) {
- FlatService.getFlats(pageSize, pageSize * (page - 1), rented)
+ private getLoaderItems(count: number): ReactNode[] {
+ return Array(count).fill(0).map((_, idx) => );
+ }
+
+ private loadFlats = (pageNumber: number) => {
+ FlatService.getFlats(this.state.pageSize, this.state.pageSize * pageNumber)
.then(this.handleFlatResult)
.catch(this.handleFail);
}
@@ -60,7 +60,7 @@ class FlatList extends Component<
const errors = Object.keys(result.errors).map((key) => result.errors![key].join("\n"));
errors.forEach((error) => toast.error(error));
} else if (result.flats !== undefined) {
- this.setState({ flats: result.flats });
+ this.setState((state) => ({ flats: [...state.flats, ...result.flats!], hasMore: result.flats!.length !== 0 }));
}
};
@@ -69,7 +69,4 @@ class FlatList extends Component<
}
}
-
-
-
export default FlatList;
diff --git a/flatrent/src/services/FlatService.tsx b/flatrent/src/services/FlatService.tsx
index c56c937..92c9490 100644
--- a/flatrent/src/services/FlatService.tsx
+++ b/flatrent/src/services/FlatService.tsx
@@ -98,12 +98,11 @@ class FlatService {
public static async getFlats(
count: number,
offset: number,
- rented: boolean = false
): Promise {
const data: IFlatListResponse = {};
try {
- const rentedQuery = rented ? "&rented=true" : "";
- const result = await apiFetch(`/api/flat?count=${count}&offset=${offset}${rentedQuery}`, {
+ // const rentedQuery = rented ? "&rented=true" : "";
+ const result = await apiFetch(`/api/flat?count=${count}&offset=${offset}`, {
headers: UserService.authorizationHeaders(),
});
if (result.ok) {
diff --git a/flatrent/src/variables.css b/flatrent/src/variables.css
index 9ad5448..6871816 100644
--- a/flatrent/src/variables.css
+++ b/flatrent/src/variables.css
@@ -15,7 +15,7 @@
--main-accent-color: #203961;
--main-accent-alt-color: #ff5a5f;
--main-accent-alt-color-rgb: 255, 90, 95;
- --main-accent-alt-muted-color: #5e8193;
+ --main-accent-alt-muted-color: #ff666ba1;
/* --main-accent-alt-color: #456990; */
/* --main-font-color: rgba(0, 0, 0, 0.9); */
--main-font-color: #1b1b1e;
diff --git a/flatrentbackend/Startup.cs b/flatrentbackend/Startup.cs
index 9f292e7..774fb60 100644
--- a/flatrentbackend/Startup.cs
+++ b/flatrentbackend/Startup.cs
@@ -45,8 +45,8 @@ public void ConfigureServices(IServiceCollection services)
services.AddAutoMapper();
services.AddSingleton(Log.Logger);
// services.AddDbContext(opts => opts.UseNpgsql(Configuration.GetConnectionString("DataContext")).UseLazyLoadingProxies());
- services.AddDbContext(opts => opts.UseNpgsql(Configuration.GetConnectionString("DataContext")).UseLazyLoadingProxies());
-// services.AddDbContext(opts => opts.UseSqlServer(Configuration.GetConnectionString("DataContext")).UseLazyLoadingProxies());
+// services.AddDbContext(opts => opts.UseNpgsql(Configuration.GetConnectionString("DataContext")).UseLazyLoadingProxies());
+ services.AddDbContext(opts => opts.UseSqlServer(Configuration.GetConnectionString("DataContext")).UseLazyLoadingProxies());
services.AddAuthorization(options =>
{
diff --git a/tools/aruodaspage.py b/tools/aruodaspage.py
index 5777135..b145e86 100644
--- a/tools/aruodaspage.py
+++ b/tools/aruodaspage.py
@@ -9,7 +9,11 @@
if (page == None):
exit(0)
-page = requests.get('https://www.aruodas.lt/butu-nuoma/puslapis/{}/'.format(page))
+if ('https' in page):
+ page = requests.get(page)
+else:
+ page = requests.get('https://www.aruodas.lt/butu-nuoma/puslapis/{}/'.format(page))
+
soup = BeautifulSoup(page.text, 'html.parser')
for row in soup.find_all('tr', class_='list-row'):