Releases: SenseNet/sn-client
June 2020
Summertime, and the livin' is easy 😎☀️
The weather is getting warmer but hard work never stops. We are still working on making our product better and better. In the last 4 weeks we were working on performance optimization, layout standardization and revamp our example apps to be compatible with the new authentication.
So here are the changes what we made:
Admin-ui@1.8.0
-
We tried to reduce the numbers of requests, unnecessary ones have been removed and at the end we were able to halve the numbers ⭐#672
-
The command palette has changed a lot. Its new goal is to be a 'global search field' where you can search in all of the contents in the current repository easily. With the new solution it is faster 🚀 and smoother 💨 than ever before. Of course the main features of the old version are still working, like: using content queries, custom actions and help functions. #685
-
Layout standardization #669: Cause the visibility of the tree and the breadcrumb was a little bit confusing we wanted to unify them.
In the Users and groups menu, if the "root" has not only users and children, but also container contents like folders, you can use the same tree for navigating as in the Content menu, a otherwise the tree does not appear. -
On the edit/browse form the icon in the title is now a link to the related CTD
@sensenet/redux@5.5.0 🆕
- New method is available on stores created by createSensenetStore function: reloadRepository
With this function you can change the current repository in store runtime. It would be useful after authentication 🛂, if you need a new repository instance. #686
@sensenet/redux-promise-middleware@2.2.0 🆕
- New method has been created in the middleware as well: reset. We needed it cause of the change in @sensenet/redux package ☝️
Dear contributors!
We have a new ESLint rule for ordering imports #684
The order:
- @sensenet/... packages
- @material-ui/... packages
- any other packages
You can find the release here
May 2020
Out with the old in with the new ⏩
Good bye @zoltanbedi, welcome new friend @taki9! In this release we did a bunch of breaking changes. We changed the authentication under sensenet to a new robust solution which is IdentityServer4. Because of this we are releasing a react component library for helping working with it. Check it out! We have also refactored our admin ui and example apps to use the new authentication method.
@sensenet/authentication-oidc-react@1.0.0 🆕
@sensenet/authentication-oidc-react is a react component library that uses React context api for authenticating with oidc client.
There are 2 components and 1 hook that you can use. AuthenticationProvider
, OidcSecure
, useOidcAuthentication
.
Example
import { AuthenticationProvider, useOidcAuthentication, UserManagerSettings } from '@sensenet/authentication-oidc-react'
import { Repository } from '@sensenet/client-core'
import { RepositoryContext } from '@sensenet/hooks-react'
import React, { PropsWithChildren } from 'react'
import { BrowserRouter, useHistory } from 'react-router-dom'
export const repositoryUrl = 'https://my-service.sensenet.com/'
export const configuration: UserManagerSettings = {
client_id: 'spa',
automaticSilentRenew: true,
redirect_uri: 'http://localhost:3000/authentication/callback',
response_type: 'code',
post_logout_redirect_uri: 'http://localhost:3000/',
scope: 'openid profile sensenet',
authority: 'https://is.my-service.sensenet.com/',
silent_redirect_uri: 'http://localhost:3000/authentication/silent_callback',
extraQueryParams: { snrepo: repositoryUrl },
}
export function AppProviders({ children }: PropsWithChildren<{}>) {
return (
<BrowserRouter>
<AuthProvider>
<RepositoryProvider>{children}</RepositoryProvider>
</AuthProvider>
</BrowserRouter>
)
}
export const AuthProvider = ({ children }: PropsWithChildren<{}>) => {
const history = useHistory()
return (
<AuthenticationProvider configuration={configuration} history={history}>
{children}
</AuthenticationProvider>
)
}
export const RepositoryProvider = ({ children }: PropsWithChildren<{}>) => {
const { oidcUser } = useOidcAuthentication()
if (!oidcUser) {
return <LoginForm />
}
return (
<RepositoryContext.Provider value={new Repository({ repositoryUrl, token: oidcUser.access_token })}>
{children}
</RepositoryContext.Provider>
)
}
@sensenet/client-core@3.0.0 👀
-
Changed RepositoryConfiguration from class to interface for better typing experience. It is not tightly coupled with GenericContent now.
-
❗ sessionLifetime property is moved from repository configuration to JWTService
-
🆕 token can be passed to the repository configuration. This will be sent with all requests as an Authorization header.
-
Breaking change: Functions belonging to allowed child types moved from the repository object to
repository.allowedChildTypes
as:- add
- update
- remove
- get
- getImplicit
- getExplicit
- getFromCTD
- listEmpty
-
New methods available on the repository to manage document previews accessible by
repository.preview
object:- getPageCount
- getExistingImages
- available
- regenerate
- check
- getComments
- addComment
- deleteComment
-
New methods to get metadata and the value of a property of a content on the
repository
:- getMetadata
- getPropertyValue
Admin-ui@1.7.0
-
Route handling is reworked. From now on the app has user friendly URL paths.
-
Delete action added to the context menu for files. #633
-
Document viewer design improvements. #658
-
New delete, move and copy buttons added to the content list for batch operations. They're shown when multiple items are selected #631
-
Items on the content list are selected if left click on them once #637
-
Loader added to the copy and move dialogs during the actions are in progress. #639
-
Share, Restore and Preview actions are temporarily disabled until the related screens and logic are finished.
-
fix: Result from command palette's search dropdown and double-clicks on a folder in the result on the search page navigated the user to an empty page. The default value of a property had to be set. #646
-
fix: Content list table next to the loader was shown during data loading. #641
-
fix: date format was not consistent with the chosen language #659
You can find the release here
Work From Home 🏠
Because of the pandemic we are now working from home. This doesn't mean that the development is stopped. Here are the changes we made.
@sensenet/redux@5.3.0
- Added some missing actions for
- put
- content creation with a content template
- preview related actions
- preview comments
- allowedchildtypes
- restore from trash
- add/remove list fields
@sensenet/document-viewer-react@2.0.6
- fix: adding comments returned error, because the x and y coordinates were floating numbers and the request body was not a valid json. These two params' type is changed to string. #617
sn-dms-demo@2.0.1
- DMS demo is refactored to use create react app.
Admin-ui@1.6.0
- Deleting the active item from tree now doesn't crash. #591
- Fix double click on localization file and on users and groups #604
- Changed our progress indicator to circle #609
- 🆕 We restyled our forms #593
2020-03
Probably one of the biggest sensenet updates of all time 💯
The last 4 weeks have been quite productive for the product development team's front-end division. We've managed to finish some long-term tasks taking huge steps towards providing future SNaaS customers a stable, performant and usable environment and a constantly evolving client library.
sn-client-core@2.4.0
share
method is added to therepository
. It can be used like in the following example:
repository.share({
content //the content to be shared,
identity //user or email address to share with
sharingLevel // sharing level, Open or Edit
sharingMode: // sharing mode, Private, Authenticated or Public
}
})
count
method is also added to get only the count of children in a collection:
repository.count({ path: '/Root/Content' })
sn-controls-react@3.3.5
- FIX: tagsinput fix in browse view.
sn-default-content-types@2.0.5
- HandlerName is now added to types in default schema.
sn-listcontrols-react@1.4.0
- Material-ui default
Table
component here is now change toVirtualizedTable
making it more performant.
sn-redux@5.2.0
Some new actions are added related to the sharing feature:
-
getSharingEntries
: returns sharing entries of a content, -
share
: redux actions for calling the above mentioned repository.share method, -
removesharing
: action for removing a sharing entry (unshare) from a content, -
A new built-in reducer named
sharing
is added to contain sharing related things. -
getSchema
action is now returning the whole actual schema and its old functionality is moved to a new action namedgetSchemaByTypeName
Admin-ui@1.5.0
- The whole admin-ui has undergone a global style refactor, generalization and theme pimp up. 🎉🎉
- Based on the feedbacks that we are getting continuously we've made some desing changes in both dark and light themes to make the ui cleaner and more usable. 💅
- Upload is only seen and possible to choose from 'Add new' dropdown if there's possible to add Files (actually content types using the file handler and able to be uploaded).
- The tree refactored, the basic material-ui Tree component is changed to VirtualizedTree that makes browsing the tree more seemless and it has also reduced the amount of downloaded data. 🎉🎉
DMS demo@2.0.0
- DMS demo is now a simple example like the other ones (todo app, image gallery, etc), so it is moved to another url and also lost some of its funcionalities which were not really document management related.
- The repository behind the dms demo is also changed to dev.demo.sensenet.com to unify the current example apps working with the same backend.
- User management features (adding, removing users, group and role management) are removed from the DMS demo, along google authentication and the workspace favoriting and following features.
- But the share functionality is now usable including the shared with me page listing the content shared with the current user.
- Saved search functionality is fixed. 🔍
- Trash page is added. 🚮
February 2020
💛💙Valentine's Day 2020💜💚
It is the time to love and be loved.
Here are the changes what we made last month. We hope that you will love them 💗👇
In this release we were about to optimize the admin-ui.
sn-redux
- We have changed the type of
persistedState
(Initial state of the store) fromDeepPartial<T>
toPreloadedState<T>
.
Admin-ui@1.4.3
- We spent time on optimizing our frontend
#550
and we also tried to reduce the bundle size
#554
If you would like to read about the optimization process check our blogbost here
💕Happy Valentine's Day! 💕
Hotfix release 2020.1.1
In this release there are couple of api changes. We needed to refactor those code because the logic inside failed when function names were minified.
client-core
getSchema
method from SchemaStore is removed. Use thegetSchemaByName
method instead. Be aware that this is case sensitive so"genericcontent"
won't be equal to"GenericContent"
isContentFromType
takes a contentTypeName(string) as a second parameter now instead of anT
type. To get proper typing support use the generic type like thisisContentFromType<Setting>(content, 'Setting')
client-utils
- Trace - you have to provide a unique name in the trace options now. There is a new options called
methodName
.
control-mapper
setupFieldSettingDefault
method now takes a string as first parameter instead of function. To get full typing support use it like this
controlMapper.setupFieldSettingDefault<ChoiceFieldSetting>('ChoiceFieldSetting', setting => {})
Be aware that this is case sensitive so choicefieldsetting won't be equal to ChoiceFieldSetting
January 2020
🎆🥂 Happy New Year 2020
We're kicking of the new year with some bug fixes and performance improvements for the Admin-ui.
Admin-ui@1.4.1
- We moved the add button from the bottom right to the left side menu #520
- Clicking the add button now opens a drop down instead of the bottom drawer #528
- The profile settings and logout moved to the header #526
- You can now change the theme from the new profile menu. Also we changed the default theme to light 🤍 #525
- We now bundle production code this is now means a decrease in the bundle size 📉 #532
Packages
@sensenet/client-core@2.2.6
- There is a barrel file in every folder now so you can import
RepositoryConfiguration
like this
import { RepositoryConfiguration } from '@sensenet/client-core'
instead of this
import { RepositoryConfiguration } from '@sensenet/client-core/dist/Repository/RepositoryConfiguration'
@sensenet/client-utils@1.7.3
- There is a new
BrowserConsoleLogger
that formats the messages in a way that all modern browsers understand
December 2019
🎄🎁 Christmas 2019 ⛄️❄️
In this release our sensenet logo has borrowed 🎅 Santa's hat to makes people happy.😊
We also would like to make you blissful so here are the changes we made 👇🏻
-
We have upgrage our code to Typescript 3.7 🎉
-
Our example apps have been moved to sn-client monorepo 🏁:
sn-react-imageupload
sn-react-imagegallery
sn-react-memoapp
sn-react-calendar
sn-react-browser
sn-react-tasklist
sn-react-usersearchThank you for the contributors:
blaskodaniel,
Khegyi,
VargaJoe
Admin-ui@1.4.0
- New dialogs have been created for Contextmenu (Approve/Reject, Versions, Check In/Out, Delete)🆕 #379
- The bug of upload the same file right after cancellation has been solved 🃏 #491
- Versioninfo item has removed from the drawer ✂️ #425
- Schema is now automatically updated on Save 🔄 #489
Packages
@sensenet/controls-react@3.3.2
- Content name is 'undefined' in the notification after modification bug has been fixed 🎫 #450
- The deafult text color for rich text editor has been changed to black in dark mode cause it was not visible on white background ⚫️⚪️ #490
- Default user avatar from displayname has been created 👀 #497
- Password field's value is now saved when a new user is created 🔒
- Tagsinput query has been set with multiple allowed types
♦️ - Creating a new content with a ContentTemplate is available from now 🏆
@sensenet/client-core@2.2.5
- Error handling for Upload has been fixed ⏫ #449
@sensenet/pickers-react@1.2.8
- Error handling for navigation in pickers has been fixed 🔖 #496
@sensenet/list-controls-react@1.3.15
- Checkbox functions have been fixed 🔳 #500
@sensenet/hooks-react@1.0.4
- useWopi hook is refactored to return two functions instead of values.🏄
Example usage:
const { isWriteAvailable } = useWopi()
isWriteAvailable(content) && someFunction()
Hotfix for upload in admin ui
There was a critical bug in admin-ui that prevented the user from uploading.
This is fixed in this release. 🙇🏻♂️
November 2019
🎃 Hacktoberfest 2019 2/2 🎃
In this release there are some changes that coming from hacktoberfest contributors. Our readme is translated to Brazilian Portuguese, thanks to @Paulophmp and @thiagobfiorenza.
Admin-ui@1.3.0
- In the setup view clicking on learn more now opens a new browser tab #426
- 🐛 Cannot save a query fixed thanks to @atomanonymous
- Execute CRUD actions from command palette #382
Packages
@sensenet/client-utils@1.7.0
-
Moved @furystack/inject and @furystack/logging to client utils. Thanks to @Attila816
Check the client-utils readme for usage and examples
@sensenet/document-viewer-react@2.0.0 💥
- We have changed the state management library from redux to react hooks api
- The new viewer uses the new useRepository hook from @sensenet/hooks-react and a default api settings. This means that you no longer need to define the api endpoints yourself if you use a sensenet repository.
example usage:
import React, { useState } from "react";
import {
defaultTheme,
DocumentTitlePager,
DocumentViewer,
LayoutAppBar,
RotateActivePagesWidget,
SaveWidget,
SearchBar,
ToggleCommentsWidget,
ToggleShapesWidget,
ToggleThumbnailsWidget,
ZoomInOutWidget,
ZoomModeWidget
} from "@sensenet/document-viewer-react";
import { MuiThemeProvider } from "@material-ui/core/styles";
import { RepositoryContext } from "@sensenet/hooks-react";
import { Repository } from "@sensenet/client-core";
export const ViewerExample: React.FC = () => {
const [repository, setRepository] = useState(
new Repository({ repositoryUrl: hostName })
);
return (
<MuiThemeProvider theme={defaultTheme}>
<RepositoryContext.Provider value={repository}>
<DocumentViewer
theme={defaultTheme}
documentIdOrPath={
"/Root/Content/IT/Document_Library/Brazzaville/100pages.pdf"
}
>
<LayoutAppBar>
<div>
<ToggleShapesWidget />
<ToggleThumbnailsWidget />
<ZoomInOutWidget />
<ZoomModeWidget />
<RotateActivePagesWidget />
<SaveWidget />
</div>
<DocumentTitlePager />
<div>
<ToggleCommentsWidget />
<SearchBar />
</div>
</LayoutAppBar>
</DocumentViewer>
</RepositoryContext.Provider>
</MuiThemeProvider>
);
};