Skip to content

Commit

Permalink
feat(datepicker): adding Datepicker component
Browse files Browse the repository at this point in the history
  • Loading branch information
sathishkumar-thangavel authored and asif-ahmed-1990 committed May 22, 2020
1 parent d53a813 commit 9208e76
Show file tree
Hide file tree
Showing 11 changed files with 909 additions and 4 deletions.
9 changes: 7 additions & 2 deletions .stylelintrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
"rules": {
"no-descending-specificity": null,
"at-rule-no-unknown": null,
"custom-property-empty-line-before": null
"custom-property-empty-line-before": null,
"selector-type-no-unknown": [true,
{
ignore: ["custom-elements"]
}
]
}
}
}
30 changes: 30 additions & 0 deletions src/components.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ export namespace Components {
*/
"value": string;
}
interface FwDatepicker {
"dateFormat": string;
"dateValue": any;
"endDate": any;
"maxDate": any;
"minDate": any;
"mode": string;
"placeholder": string;
"startDate": any;
}
interface FwIcon {
/**
* Color in which the icon is displayed, specified as a standard CSS color or as a HEX code.
Expand Down Expand Up @@ -405,6 +415,12 @@ declare global {
prototype: HTMLFwCheckboxElement;
new (): HTMLFwCheckboxElement;
};
interface HTMLFwDatepickerElement extends Components.FwDatepicker, HTMLStencilElement {
}
var HTMLFwDatepickerElement: {
prototype: HTMLFwDatepickerElement;
new (): HTMLFwDatepickerElement;
};
interface HTMLFwIconElement extends Components.FwIcon, HTMLStencilElement {
}
var HTMLFwIconElement: {
Expand Down Expand Up @@ -492,6 +508,7 @@ declare global {
interface HTMLElementTagNameMap {
"fw-button": HTMLFwButtonElement;
"fw-checkbox": HTMLFwCheckboxElement;
"fw-datepicker": HTMLFwDatepickerElement;
"fw-icon": HTMLFwIconElement;
"fw-input": HTMLFwInputElement;
"fw-label": HTMLFwLabelElement;
Expand Down Expand Up @@ -573,6 +590,17 @@ declare namespace LocalJSX {
*/
"value"?: string;
}
interface FwDatepicker {
"dateFormat"?: string;
"dateValue"?: any;
"endDate"?: any;
"maxDate"?: any;
"minDate"?: any;
"mode"?: string;
"onFwChange"?: (event: CustomEvent<any>) => void;
"placeholder"?: string;
"startDate"?: any;
}
interface FwIcon {
/**
* Color in which the icon is displayed, specified as a standard CSS color or as a HEX code.
Expand Down Expand Up @@ -988,6 +1016,7 @@ declare namespace LocalJSX {
interface IntrinsicElements {
"fw-button": FwButton;
"fw-checkbox": FwCheckbox;
"fw-datepicker": FwDatepicker;
"fw-icon": FwIcon;
"fw-input": FwInput;
"fw-label": FwLabel;
Expand All @@ -1010,6 +1039,7 @@ declare module "@stencil/core" {
interface IntrinsicElements {
"fw-button": LocalJSX.FwButton & JSXBase.HTMLAttributes<HTMLFwButtonElement>;
"fw-checkbox": LocalJSX.FwCheckbox & JSXBase.HTMLAttributes<HTMLFwCheckboxElement>;
"fw-datepicker": LocalJSX.FwDatepicker & JSXBase.HTMLAttributes<HTMLFwDatepickerElement>;
"fw-icon": LocalJSX.FwIcon & JSXBase.HTMLAttributes<HTMLFwIconElement>;
"fw-input": LocalJSX.FwInput & JSXBase.HTMLAttributes<HTMLFwInputElement>;
"fw-label": LocalJSX.FwLabel & JSXBase.HTMLAttributes<HTMLFwLabelElement>;
Expand Down
13 changes: 13 additions & 0 deletions src/components/button/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,19 @@ fw-button displays a button on the user interface and enables performing specifi
| `fwFocus` | Triggered when the button comes into focus. | `CustomEvent<void>` |


## Dependencies

### Used by

- [fw-datepicker](../datepicker)

### Graph
```mermaid
graph TD;
fw-datepicker --> fw-button
style fw-button fill:#f9f,stroke:#333,stroke-width:4px
```

----------------------------------------------

Built with ❤ at Freshworks
79 changes: 79 additions & 0 deletions src/components/datepicker/datepicker.e2e.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { newE2EPage } from '@stencil/core/testing';
import moment from 'moment-mini';

describe('fw-datepicker', () => {
it('renders', async () => {
const page = await newE2EPage();

await page.setContent('<fw-datepicker></fw-datepicker>');
const element = await page.find('fw-datepicker');
expect(element).toHaveClass('hydrated');
});

it('should show and hide the datepicker popup when click', async () => {
const page = await newE2EPage();

await page.setContent('<fw-datepicker></fw-datepicker>');
const element = await page.find('fw-datepicker >>> fw-input');
await element.click();
const popup = await page.find('fw-datepicker >>> .datepicker');
expect(popup).toBeTruthy();

const updateEle = await page.find('fw-datepicker >>> fw-button.close-date-picker');
await updateEle.click();

const datePickerEle = await page.find('fw-datepicker >>> .datepicker');
expect(datePickerEle).toBeNull();
});

it('should emit fwChange when it is updated', async () => {
const page = await newE2EPage();

await page.setContent('<fw-datepicker></fw-datepicker>');
const fwChange = await page.spyOnEvent('fwChange');
const element = await page.find('fw-datepicker >>> fw-input');
await element.click();

const updateEle = await page.find('fw-datepicker >>> fw-button.update-date-value');

element.setProperty('selectedDay', '27-04-2020');
await updateEle.click();
expect(fwChange).toHaveReceivedEvent();
});

it('range picker should render and emit fwChange', async () => {
const page = await newE2EPage();

await page.setContent('<fw-datepicker mode="range"></fw-datepicker>');
const fwChange = await page.spyOnEvent('fwChange');
const element = await page.find('fw-datepicker >>> fw-input');
await element.click();
const popup = await page.find('fw-datepicker >>> .daterangepicker');
expect(popup).toBeTruthy();

const updateEle = await page.find('fw-datepicker >>> fw-button.update-range-value');
element.setProperty('minDate', '01-04-2020');
element.setProperty('maxDate', '27-04-2020');
await updateEle.click();
expect(fwChange).toHaveReceivedEvent();
});

it('date should be as per format', async () => {
const page = await newE2EPage();

await page.setContent('<fw-datepicker date-format="YYYY-MM-DD"></fw-datepicker>');
const element = await page.find('fw-datepicker >>> fw-input');
await element.click();

const dateEle = await page.find('fw-datepicker >>> .c-day-container.highlight span');
await dateEle.click();

const updateEle = await page.find('fw-datepicker >>> fw-button.update-date-value');
await updateEle.click();

const datePicketValue = await element.getProperty('value');
const todayValue = moment().format('YYYY-MM-DD');

expect(datePicketValue.toString()).toBe(todayValue.toString());
});
});
Loading

0 comments on commit 9208e76

Please sign in to comment.