Skip to content

Commit

Permalink
feat(cdk): remove exports and improved code
Browse files Browse the repository at this point in the history
  • Loading branch information
zarghamkhandev committed Mar 11, 2023
1 parent 3034813 commit bf92e16
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 49 deletions.
28 changes: 9 additions & 19 deletions projects/core/services/breakpoint.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,32 @@ import {TUI_MEDIA} from '../tokens';
@Injectable()
export class TuiBreakpointService extends Observable<string | null> {
constructor(@Inject(TUI_MEDIA) media: TuiMedia, @Inject(WINDOW) windowRef: Window) {
const breakpoints = tuiGetBreakpoints(media);
const events$ = breakpoints.map(breakpoint =>
fromEvent<MediaQueryListEvent>(
windowRef.matchMedia(breakpoint.query),
`change`,
),
const breakpoints = getBreakpoints(media);
const events$ = breakpoints.map(({query}) =>
fromEvent<MediaQueryListEvent>(windowRef.matchMedia(query), `change`),
);
const media$ = merge(...events$).pipe(
map(event => event.media),
map(media => breakpoints.find(breakpoint => breakpoint.query === media)!),
startWith(tuiCurrentBreakpoint(breakpoints, windowRef)),
map(media => media.name),
map(({media}) => breakpoints.find(({query}) => query === media)!.name),
startWith(currentBreakpoint(breakpoints, windowRef).name),
share(),
);

super(subscriber => media$.subscribe(subscriber));
}
}

export interface TuiBreakpoint {
interface Breakpoint {
name: string;
query: string;
}

export function tuiGetBreakpoints(media: TuiMedia): TuiBreakpoint[] {
function getBreakpoints(media: TuiMedia): Breakpoint[] {
return Object.entries(media).map(([name, value]) => ({
name,
query: `(max-width: ${value - 1}px)`,
}));
}

export function tuiCurrentBreakpoint(
breakpoints: TuiBreakpoint[],
windowRef: Window,
): TuiBreakpoint {
return breakpoints.find(
breakpoint => windowRef.matchMedia(breakpoint.query).matches,
)!;
function currentBreakpoint(breakpoints: Breakpoint[], windowRef: Window): Breakpoint {
return breakpoints.find(({query}) => windowRef.matchMedia(query).matches)!;
}
31 changes: 1 addition & 30 deletions projects/core/services/test/breakpoint.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,7 @@ import {configureTestSuite} from '@taiga-ui/testing';

import {TuiMedia} from '../../interfaces';
import {TUI_MEDIA} from '../../tokens';
import {
TuiBreakpoint,
TuiBreakpointService,
tuiCurrentBreakpoint,
tuiGetBreakpoints,
} from '../breakpoint.service';
import {TuiBreakpointService} from '../breakpoint.service';

describe(`TuiBreakpointService`, () => {
const mock: HTMLDivElement = document.createElement(`div`);
Expand Down Expand Up @@ -54,30 +49,6 @@ describe(`TuiBreakpointService`, () => {
expect(service).toBeTruthy();
});

it(`should return an array of breakpoint objects`, () => {
const media = TestBed.inject(TUI_MEDIA);

expect(tuiGetBreakpoints(media)).toEqual([
{name: `mobile`, query: `(max-width: 767px)`},
{name: `desktopSmall`, query: `(max-width: 1023px)`},
{name: `desktopLarge`, query: `(max-width: 1279px)`},
]);
});

it(`should return the correct breakpoint object`, () => {
const breakpoints: TuiBreakpoint[] = [
{name: `mobile`, query: `(max-width: 767px)`},
{name: `desktopSmall`, query: `(max-width: 1023px)`},
{name: `desktopLarge`, query: `(max-width: 1279px)`},
];
const windowRef = TestBed.inject(WINDOW);

expect(tuiCurrentBreakpoint(breakpoints, windowRef)).toEqual({
name: `mobile`,
query: `(max-width: 767px)`,
});
});

it(`should emit the current breakpoint name when subscribed to`, () => {
const observerMock = jest.fn();

Expand Down

0 comments on commit bf92e16

Please sign in to comment.